企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 元素操作 > 前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个原素进 行操作。鼠标点击呢还是键盘输入,这要取决于我们定位的是按钮还输入框。 一般来说,webdriver 中比较常用的操作对象的方法有下面几个 >* click 点击对象 >* send_keys 在对象上模拟按键输入 >* clear 清除对象的内容,如果可以的话 >* submit 清除对象的内容,如果可以的话 [TOC] #### 1.输入框 ~~~ $element = $driver->findElement(WebDriverBy::id('wd')); $element->sendKeys("wwe"); //在输入框中输入内容 $element->clear(); //将输入框清空 $element->getAttribute('value'); //获取输入框的文本内容 ~~~ #### 2.单选框 ~~~ $radio = $driver->findElement(WebDriverBy::id('BookMode')); $radio->click(); //选择某个单选项 $radio->isSelected(); //判断某个单选项是否已经被选择 ~~~ #### 3.多选框 ~~~ $checkbox = $driver->findElement(WebDriverBy::id('myCheckbox')); $checkbox->click(); //选择某选项 $checkbox->isSelected(); //判断该选项是否已经被选择 $checkbox->isEnabled(); //判断是否enable ~~~ #### 4.下拉框 > 下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项。 ~~~ $select = $driver->findElement(WebDriverBy::id('myselect')); $select->findElement(WebDriverBy::xpath("//option[@value='100']"))->click(); //找到值为100的选项进行选中 ~~~ #### 5.按钮 ~~~ $btn = $driver->findElement(WebDriverBy::id('btn')); $btn->click(); //点击按钮 $btn->isEnabled(); //判断是否enable ~~~ #### 6.文件上传 ~~~ $upload = $driver->findElement(WebDriverBy::id('img-upload')); $filePath = "C:\test\\uploadfile\\media_ads\\test.jpg"; $upload->sendKeys($filePath); ~~~ #### 7.指定元素点击 > 因为有时候因为种种原因(如元素上有蒙版层或者因为一些浮动的div导致坐标变化或者不可点击),而不能使用$ele.click()时,采用通用的方式,就是用JS执行点击事件。而且点击事件是可被监听的,可在元素上写onclick事件进行监听。 ~~~ //用webdriver获取对象,再进行JS操作 $ele = $driver->findElement(WebDriverBy::id('haha')); $driver->executeScript("arguments[0].click();",[$ele]); //用JS获取对象进行操作 $js = <<<js var ele = document.getElementById('haha'); ele.click(); js; $driver->executeScript($js); ~~~ #### 8.滚动到指定元素 > 用JS的方式滚动到指定的元素。 ~~~ $ele = $driver->findElement(WebDriverBy::id('haha2')); $driver->executeScript("arguments[0].scrollIntoView();",[$ele]); ~~~ #### 9.移动到指定元素 > 移动的时候,鼠标不会真正移动,但实际上已移动,这个可以在haha2元素上写一个onmouseover事件进行监听即可测试。 ~~~ $ele = $driver->findElement(WebDriverBy::id('haha2')); $driver->getMouse()->mouseMove($ele->getCoordinates()); ~~~