Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点。 在Selenium中充分使用CSS定位器可以帮助您以更高效,更彻底的方式执行测试。 我从7年以来一直从事自动化测试行业,并且我经常观察到测试人员在使用Selenium执行自动化测试时 ,往往会忘记每个CSS定位器的用途。 新生很难理解他们,经验丰富的测试人员在使用Selenium执行自动化测试时,经常会使用几个选择器来定位网页上的元素。
有时候,我看到经验丰富的自动化测试人员会花更长的时间查找元素,因为他们习惯于坚持自己喜欢的定位器。 这就是为什么我认为我会为Selenium中CSS定位器提供一个教程系列,以帮助萌芽的自动化测试人员提出这些定位器的战略实现。 对于我们这些经验丰富的人来说,这将是一个快速而又好的总结。
当我们使用Selenium执行自动化测试时,本文将介绍链接文本和部分链接文本的实际实现。 任何Web应用程序上的链接都可以帮助查找文本完全匹配或部分匹配的元素。 使用Selenium中的链接文本和部分链接文本,我们将能够找到这两个匹配项。 这是我关于Selenium中CSS Locator的系列教程的最后一篇文章。
您可以查看有关Selenium中不同CSS定位器的其他文章,这些文章可通过多种方式帮助您定位元素:
- Selenium中的ID定位器
- 硒中的名称定位器
- Selenium中的类名称定位器
- Selenium中的标记名定位器
- Selenium中CSS选择器
- Selenium中的XPath
如果您是Selenium的高级或中级从业人员,那么您可以喜欢上面提到的专门文章。 并获得我们的完整指南,以帮助您说明Selenium中CSS定位器的实际演示。
查看Selenium WebDriver中每个CSS定位器的完整指南,并附带示例
如此说来,让我们找出如何利用Selenium中的链接文本和部分链接文本来定位网页上的元素。
在Selenium中使用链接文本查找元素
为了使用Selenium中的链接文本访问链接,使用下面引用的代码:
driver.findElement(By.linkText("this is a link text"));
注意:在存在多个具有相似文本的链接的情况下,它将自动选择第一个。
让我们参考下面的代码片段以了解用例。 在这种情况下,我们以Airbnb为例,通过链接匹配单击果阿的任何一次停留。
带有链接文本的div元素的引用屏幕快照:
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; public class LinkText { public static void main(String[] args) { // TODO Auto-generated method stub System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 20 , TimeUnit.SECONDS); driver.manage().window().maximize(); //Opening the air bnb Goa homestays page driver.get( " https://www.airbnb.co.in/s/Goa/all " ); //locating an element via link text in Selenium now, and clicking on that stay driver.findElement(By.linkText( "Standard One Bedroom Suite with Pool & Jacuzzi" )).click(); driver.quit(); } }
我们也可以使用Selenium中的部分链接文本来定位同一元素。 让我们检查一下!
在硒中使用部分链接文本定位元素
Selenium中的部分链接文本是通过链接定位元素的另一种方法。 从Selenium中的链接文本到部分链接文本的唯一区别是, 它不会查看字符串值的完全匹配,而是会进行部分匹配 。 因此,如果您要查找具有更大文本长度的链接,则可以避免只使用部分链接文本,而不必使用Selenium中的整个链接文本。
通过部分链接文本定位元素的语法。
driver.findElement(By.partialLinkText ("link text"));
参考上述情况,以下是与Airbnb相同停留时间的部分链接文本的代码段:
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; public class PartialLinkText { public static void main(String[] args) { // TODO Auto-generated method stub System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 20 , TimeUnit.SECONDS); driver.manage().window().maximize(); //Opening the air bnb Goa homestays page driver.get( " https://www.airbnb.co.in/s/Goa/all " ); //locating an element via link text now and clicking on that stay driver.findElement(By.partialLinkText( "Pool & Jacuzzi" )).click(); driver.quit(); } }
有多个匹配结果时如何选择正确的链接文本?
在Selenium中使用部分链接文本时,要记住的唯一一点是要使部分链接文本最终与页面上的多个链接文本匹配。 在这种情况下,请确保您要单击所需的。
让我们考虑另一种情况,当我们使用Selenium执行自动化测试时,您最终会匹配多个链接文本,并希望仅针对指定的链接文本。 对于果阿岛的相同寄宿家庭,我试图在其中将带有部分文本的元素定位为“池”。 因此,策略是找出许多有游泳池的住所,然后单击所需的住所,然后发布。 以下参考代码段表示如何使用Selenium中的部分链接文本从多个匹配结果中选择正确的目标。
import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; public class LinkText { public static void main(String[] args) { // TODO Auto-generated method stub System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 20 , TimeUnit.SECONDS); driver.manage().window().maximize(); //Opening the air bnb Goa homestays page driver.get( " https://www.airbnb.co.in/s/Goa/all " ); //locating an element via link text now and clicking on that stay List<WebElement> poolNumber=driver.findElements(By.partialLinkText( List<WebElement> poolNumber=driver.findElements(By.partialLinkText( "Pool" )); //find the number of links with the text as pool int numberOfStaysWithPool= poolNumber.size(); System.out.println(numberOfStaysWithPool); for ( int k= 0 ; k<numberOfStaysWithPool; k++) { //printing all those links System.out.println(poolNumber.get(k).getText()); } //select the luxury three bedroom apartment link poolNumber.get( 2 ).click(); poolNumber.get( ).click(); driver.quit(); } }
在上面的代码片段中,我使用了findElements,因为我应该接收多个带有部分文本的Web元素作为“池”。 现在,使用索引,我已经导航到想要单击的链接之一。 很简单,不是吗?
注意:链接文本和部分链接文本对于Selenium中CSS定位器都是区分大小写的。
例如,假定主页上存在链接“ Register ”,而主页的页脚中存在类似的链接“ REGISTER ”。 在这种情况下,如果要使用链接文本“ REGISTER ”进行查找,它将自动在页脚而不是另一个中选择链接。
Selenium中的链接文本和部分链接文本定位器仅适用于给定Web应用程序的链接。 如果要查找链接以外的元素,则不能在Selenium中使用链接文本或部分链接文本定位器。 如果您正在处理应用程序中的链接,那么这也许是最好的定位器。 测试愉快!
翻译自: https://www.javacodegeeks.com/2019/06/find-elements-link-text-partial-link-text-selenium.html