Selenium CSS选择器

时间:2020-02-23 14:30:14  来源:igfitidea点击:

1.什么是Selenium CSS选择器?

它是Selenium中的一种定位剂,通过它我们可以识别网页上的Web元素。
CSS代表级联样式表,用于样式化HTML网页的不同元素。
CSS选择器定位器始终是在网页上定位元素的最佳方法。
不论浏览器如何,CSS始终相同。

2. CSS选择器的好处

  • 与其他选择器相比,速度更快
  • 更具可读性
  • 最令人反感的

3. CSS选择器的语法

CSS选择器语法

  • HTML标记:这是用于表示Web元素的标记。

  • #:#符号用于象征ID属性。
    使用ID属性时,必须使用#号。

  • ID属性的值:是正在访问的ID属性的值。
    ID属性的值始终以#符号开头。

4.常用CSS选择器格式

以下是一些CSS选择器的主要使用格式。

  • 标签和ID
  • 标签和类别
  • 标签和属性
  • 标签,类和属性
  • 子字符串匹配以(^)开头
  • 以($)结尾
  • 包含(*)
  • 子元素直接子
  • 子孩子
  • 第n个孩子

4.1)HTML标签和ID

css=tag#id

例:

  • 打开Chrome浏览器,然后导航到Gmail网络应用程序。

  • 右键单击电子邮件或者电话输入框,然后选择检查。

电子邮件检查

  • 下面的屏幕快照显示了电子邮件或者电话元素的标签和ID。

电子邮件标签ID

要在By.cssSelector方法中添加的值:

css=input#Email
package com.theitroad.selenium; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumCSSLocators { 
     public static void main (String [] args){ 
     WebDriver driver = new ChromeDriver(); 
     driver.get("https://www.gmail.com"); 
     //Here Tag = input and Id = Email 
     driver.findElement(By.cssSelector("input#Email")).sendKeys("theitroad"); 
     } 
}

4.2)HTML标记和类

如果多个元素具有相同HTML标签和类,则硒将识别第一个。

语法:css = tag.class

例:

  • 打开Chrome浏览器,然后导航到Facebook应用程序。

  • 右键单击电子邮件或者电话输入框,然后选择检查。

电子邮件检查Facebook

  • 下面的屏幕快照显示了电子邮件或者电话元素的标签和类别。

电子邮件标签类别

要在By.cssSelector方法中添加的值:

css=input.inputtext
package com.theitroad.selenium;

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class SeleniumCSSLocators { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.facebook.com/"); 
    //Here Tag = input and Class = email 
    driver.findElement(By.cssSelector("input.inputtext[name=email]")).sendKeys("theitroad"); 
    } 
}

4.3)HTML标记和属性

如果多个元素具有相同HTML标签和属性,则硒将识别第一个元素。

语法:

css=tag[attribute=value]

例:

  • 打开Chrome浏览器,然后导航到Gmail应用程序。

  • 右键单击电子邮件或者电话输入框,然后选择检查。

检查电子邮件CSS

  • 下面的屏幕快照显示了电子邮件或者电话元素的标签和属性。

电子邮件标签属性

要在By.cssSelector方法中添加的值:

css=input[name=identifier]
package com.theitroad.selenium;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class SeleniumCSSLocators { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.gmail.com"); 
    //Here Tag = input and Id = identifier
    driver.findElement(By.cssSelector("input[name=identifier]")).sendKeys("theitroad"); 
    } 
}

4.4)HTML标记,类和属性

语法:

css=tag.class[attribute=value]

例:

  • 打开Chrome浏览器,然后导航到Facebook应用程序。

  • 右键单击电子邮件或者电话输入框,然后选择检查。

  • 下面的屏幕快照显示了电子邮件或者电话元素的标签,类和属性。

电子邮件属性

要在By.cssSelector方法中添加的值:

css=input.inputtext[name=email]
package com.theitroad.selenium; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class  SeleniumCSSLocators { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.facebook.com/"); 
    //Here Tag = input and Class = email 
    driver.findElement(By.cssSelector("input.inputtext[name=email]")).sendKeys("theitroad"); 
    } 
}

5.子串匹配

有一些特殊CSS选择器可以匹配^,$和*等属性的部分值。

5.1)以(^)开头

为了选择以某些内容开头的元素,我们使用^表示"以...开头"。

语法:

css=<[attribute^=string prefix]

要在By.cssSelector方法中添加的值:

css=input.input[id^='Em']

在脚本中,添加以下步骤以查找元素并将文本写为" theitroad"

package com.theitroad.selenium;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class CSSLocatorsStartswith { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.facebook.com/"); 
    driver.findElement(By.cssSelector("input[id^='Em']")).sendKeys("theitroad"); 
    } 
}

5.2)以($)结尾

为了选择以某些结尾的元素,我们使用$表示"结尾为"。

语法:

css=[attribute$=attributeValue]

要在By.cssSelector方法中添加的值:

css=input[id$='100']
package com.theitroad.selenium;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class  CSSLocatorsEndswith { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.facebook.com/"); 
    driver.findElement(By.cssSelector("input[id$='100']")).sendKeys("theitroad");
    } 
}

5.3)包含(*)

为了选择包含子字符串的元素,我们使用*表示"子字符串"。

语法:

css=[attribute*=attributeValue]

例:

package com.theitroad.selenium;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class  CSSLocatorsContains { 
    public static void main (String [] args){ 
    WebDriver driver = new ChromeDriver(); 
    driver.get("https://www.facebook.com/"); 
    driver.findElement(By.cssSelector("input[id*='id']")).sendKeys("theitroad");
    } 
}

我们也可以使用contains()方法。

driver.findElement(By.cssSelector("input:contains('id')")).sendKeys("theitroad");

6.定位子元素(直接子元素)

语法:parentLocator> childLocator

例:

对于示例HTML:

<div id="buttonDiv" class="small">
<button id="submitButton1" type="button" class="btn">Submit</button>
</div>

CSS定位器:div#buttonDiv> button

说明:" div#buttonDiv> button"将首先转到ID为" buttonDiv"的div元素,然后将选择其子元素-" button"。

7.在其他元素(子元素或者子子元素)中定位元素

语法:parentLocator> locator1 locator2

CSS定位器:div#buttonDiv按钮

说明:" div#buttonDiv按钮"将首先转到ID为" buttonDiv"的div元素,然后其中选择" button"元素(可以是其子元素或者子子元素)。

8.定位第n个孩子

例:

对于示例HTML:

<ul id="testingTypes">
<li>Load Testing</li>
<li>Security Testing</li>
<li>Manual Testing</li>
</ul>

CSS定位器:#testingTypes li:nth-child(2)

说明::"#testingTypes li:nth-child(2)"将选择ID为" testingTypes"的元素,然后找到li类型的第二个子元素,即"安全测试"列表项。