一般

文本框:input

  • sendkeys();//输入内容
  • clear();//清除内容
  • getAttribute 获取元素属性

单选框 radio 复选框 checkbox

  • click
  • clear (清除选中状态)
  • isSelected 查看是否被选中

按钮 button / 超链接 a

  • click
  • isEnabled 查看是否可以操作

复杂

组合键操作

一般使用click方法,如果是chrome浏览器,点击超链接 同时按ctrl会打开新标签,shift打开新的窗口。


Actions a = new Actions(driver);//点击按下
a.keyDown(Keys.CONTROL).perform();
driver.findElement(By.xpath("")).click();
a.keyUp(Keys.CONTROL).perform();//点解结束

组合鼠标操作

  1. 鼠标左键点击 (可以来打开二级菜单)
Actions action = new Actions(driver);action.click();// 鼠标左键在当前停留的位置做单击操作  
action.click(element)// 鼠标左键点击指定的元素
action.contextclick(element)//;鼠标右键点击指定元素
action.doubleClick(element);//鼠标双击元素
  1. 鼠标移动操作 (可以来打开二级菜单)
action.moveToElement(element);// 将鼠标移到 element 元素中点 
action.moveToElement(element,xOffset,yOffset)
//表示以当前element相对移动的位移量
  1. 鼠标长按操作
action.clickAndHold();// 鼠标悬停在当前位置,既点击并且不释放  
action.clickAndHold(Element);// 鼠标悬停在 Element 元素的位置
  1. 鼠标释放操
action.release();// 释放鼠标 
  1. 鼠标拖拽动作
action.dragAndDrop(source,target); //将source元素拖拽到target
action.dragAndDrop(source,xOffset,yOffset);
//可以由以上简单操作组合
action.clickAndHold(source).moveToElement(target).perform(); action.release();
//或者
action.clickAndHold(source).moveToElement(target).release().build().perform();

文件上传按钮

input 类型的 ,一般定位元素 ,然后sendkeys(文件的绝对路径)。
复杂类型的
selenium + python 文件上传

alert对话框处理

有三种 alert prompt confirm

  • alert confirm相同

1.Alert alert = driver.switchTo().alert();
alert.accept();
alert.dismiss();
alert.getText(); //获取alert的内容

  • prompt (有提示内容和输入框)

获取alert相同
通过sendKeys()输入内容

select菜单,选择项

获取
WebElement element = driver.finElement( select 的 Xpath);
Select select = new Select(element);
选择
selectByIndex(index);
selectByVisibleText(String text); 通过匹配到的字符
selectByValue(String value);通过匹配 标签的vlaue属性

Window/Tag切换

driver.getWindowHandle();返会字符串,获取当前窗口的句柄
driver.getWindowHandles();返回Set<String> 获取所有的窗口
driver.switchTo().window(窗口的String); 来跳转窗口(无论是新的标签还是新的浏览器窗口都可以通过此方法跳转)。

注意窗口间切换,要关闭窗口时,不能使用 qiut(quit driver就释放了,不能使用driver,close只是关闭当前window 或者 标签 还可以使用driver,当然close最后一个窗口或者标签时就会关闭浏览器 此时driver也不会有效)

滚动定位到特定元素位置

JavascriptExecutor scroll = (JavascriptExecutor) driver;
scroll.executeScript("arguments[0].scrollIntoView();", 指定元素);

可以通过driver.get(新的URL)进行网址跳转,也可以通过Navigation的to(新的url)实现。


Navigation n= driver.navigate();
n.back();
delay(2000);
n.refresh();
delay(2000);
n.forward();
delay(2000);
n.to("http://www.icourse163.org/home.htm?userId=1400999509#/home/course");
delay(2000);

n.to("https://www.baidu.com/s?tn=02049043_8_pg&ch=7&ie=utf-8&wd=selenium%20%E6%93%8D%E4%BD%9C%E8%BF%9B%E5%BA%A6%E6%9D%A1");

iframe

1.有id,并且唯一,直接写id
driver.switchTo().frame("iframe_id");、、//通过iframe的id或者name属性进行定位
2.有name,并且唯一,直接写name
driver.switchTo().frame("iframe_name");
3.无id,无name,先定位iframe元素
driver.swtichTo().frame(Webelement);//通过(目标iframe)webelement元素进行定位

driver.switchTo().frame(iframe_index);//没有以上属性也可以通过 通过下标(整个html文档中第几个iframe)定位到iframe

driver.switchTo().defaultContent();//切回主文档
driver.switch_to.parent_frame();//从当前iframe切回父iframe 如果当前已是主文档,则无效果

参考:

  1. selenium切换到iframe
  2. Selenium WebDriver 中鼠标事件

wait

  • 显式等待
    一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码.
// Initialize and wait till element(link) became clickable - timeout in 10 seconds
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// Print the first result
System.out.println(firstResult.getText());

解析参数

WebDriverWait

WebDriverWait( driver, timeout, poll_frequency,ignored_exceptions);

  • driver: 传入WebDriver实例,
  • timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
  • poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
  • ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。

until

until(method,message)

  • method: 在等待期间,每隔一段时间(WebDriverWait中的poll_frequency)调用这个传入的方法,直到返回值不是False
  • message: 如果超时,抛出TimeoutException,将message传入异常
    untilnot与此相反

ExpectedConditions的使用(java)

以下参考文章,copy留作日后参考。

1、 titleIs( String title)

判断当前页面的title是否精确等于预期

2、 titleContains( String title)

判断当前页面的title是否包含预期字符串

3、 urlToBe( String url)

判断当前页面的url是否精确等于预期

4、 urlContains( String fraction)

判断当前页面的url是否包含预期字符串

5、 urlMatches( String regex)

字符串正则表达式

6、 presenceOfElementLocated( By locator)

判断元素是否出现,只要有一个元素出现,就通过。(代表在不代表可见)
判断是否至少有 1 个元素存在于 dom 树中。举个例子,如果页面上有 n 个元素的 class 都是’column-md-3’,那么只要有 1 个元素存在,这个方法就返回 True。

7、 presenceOfElementsLocated( By locator)

判断元素是否出现,必须所有符合条件的元素都加载出来,才通过。

8、 elementIfVisible(WebElement element)

如果给定元素是可见的且具有非零大小,否则为null

9、presenceOfAllElementsLocatedBy( By locator)

判断元素是否出现。

10、 visibilityOfElementLocated( By locator)

传入类型为:locator
判断某个元素是否可见. 可见代表元素非隐藏,并且元素宽和高都不等于 0

11、visibilityOfAllElementsLocatedBy( By locator)

判断某组元素是否可见

12、visibilityOfAllElements(final List elements)

传入类型为:element
判断某个元素是否可见. 可见代表元素非隐藏,并且元素宽和高都不等于 0

13、textToBePresentInElement( WebElement element, String text)

判断某个元素中的text是否包含了预期的字符串;

14、textToBePresentInElement(By locator, String text)

判断某个元素中的 text 是否 包含 了预期的字符串

15、textToBePresentInElementLocated(final By locator, final String text)

判断某个元素中的 text 是否 包含 了预期的字符串

16、textToBePresentInElementValue( WebElement element, String text)

判断某个元素中的 value 属性是否包含 了预期的字符串

17、textToBePresentInElementValue(final By locator, final String text)

判断某个元素中的 value 属性是否包含 了预期的字符串

18、frameToBeAvailableAndSwitchToIt(final String frameLocator)

断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False

19、frameToBeAvailableAndSwitchToIt(final By locator)

断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False

20、invisibilityOfElementLocated(final By locator)

某个元素中是否不存在于dom树或不可见;

21、invisibilityOfElementWithText(final By locator, final String text)

判断带有文本的元素要么不可见,要么文本不存在于元素上

22、elementToBeClickable(final By locator)

判断某个元素中是否可见并且是enable的,这样的话才叫clickable;

23、elementToBeClickable(final WebElement element)

判断某个元素中是否可见并且是enable的,这样的话才叫clickable;

24、stalenessOf(final WebElement element)

判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是 否刷新了。

25、refreshed(final ExpectedCondition condition)

26、elementToBeSelected(WebElement element)
页面元素处于被选中状态

27、elementSelectionStateToBe( WebElement element, boolean selected)

判断某个元素的选中状态是否符合预期,传入element

28、elementToBeSelected(By locator)

判断某个元素是否被选中了,一般用在下拉列表;

29、elementSelectionStateToBe(final By locator, final boolean selected)

判断某个元素的选中状态是否符合预期,传入locator

30、alertIsPresent()

判断页面上是否存在alert。

31、not(final ExpectedCondition<?> condition)

32、WebElement findElement(By by, WebDriver driver)

33、List findElements(By by, WebDriver driver)

34、isElementPresent(By.id(“xxx”)

  • 隐式等待,相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。。

//一劳永逸 整个生命周期都有作用 直到查找到元素才继续执行

driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);