## 元素操作
> 前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个原素进
行操作。鼠标点击呢还是键盘输入,这要取决于我们定位的是按钮还输入框。
一般来说,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());
~~~