java—如何通过xpath查找具有相同类、名称等的元素

qc6wkl3g  于 2021-07-03  发布在  Java
关注(0)|答案(6)|浏览(607)

有两个按钮具有相同的类,文本等。我必须找到并单击每个按钮。

<a class="jsx-1291462554"><button style="padding: 12px 15px 10px; border-radius: 4px; font: 500 15px / 16px hind; color: white; background-color: rgb(18, 83, 181); justify-content: center; text-align: center; cursor: pointer; text-decoration: none; outline: none; border: none; width: 162px;"><span class="jsx-1291462554 magzter__buttonText">Choose</span></button></a>
raogr8fs

raogr8fs1#

这两个元素都是动态元素。所以到 click() 在第一个选择中,您需要为 elementToBeClickable() 您可以使用以下任一定位器策略: xpath :

WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//p[starts-with(., 'Choose the plan that')]//following::a[1]/button/span[text()='Choose']")));
0tdrvxhp

0tdrvxhp2#

如果可能的话,放一些东西来区分按钮的Map。但如果不可能的话,这些Map就会解决

(//section[contains(@class, 'twocol')]/a)[1]

(//section[contains(@class, 'twocol')]/a)[2]
yqhsw0fo

yqhsw0fo3#

查找与以下定位器匹配的第一个和第二个元素:

(//a[@class="jsx-1291462554"]/button)[1]
(//a[@class="jsx-1291462554"]/button)[2]

使用标记按钮查找所有元素,并且是指定了类的“a”的第一个子元素:

//a[@class="jsx-1291462554"]/button[1]

css等价于第一个xpath:

a.jsx-1291462554>button:nth-of-type(1)
a.jsx-1291462554>button:nth-of-type(2)

第二个xpath的css等价项:

a.jsx-1291462554>button:nth-child(1)
mzsu5hc0

mzsu5hc04#

为了自动点击按钮,我们使用 XPath 函数,它在类中 By .
1.版本

driver.FindElement(By.XPath("//button[@class ='CLASS NAME']")).Click();

2.版本

driver.FindElement(By.XPath("//div[normalize-space(.)='NAME']/button")).Click();

要启用文本字段的自动输入,我们还可以使用函数 CssSelector 位于班级 By .

IWebElement usernameInput = driver.FindElement(By.CssSelector("input[name='username']"));
        IWebElement passwordInput = driver.FindElement(By.CssSelector("input[name='password']"));

        usernameInput.SendKeys("YourUsername");
        passwordInput.SendKeys("YourPassword");
8ljdwjyq

8ljdwjyq5#

//节[contains(@class,'chooseplantitle')]//按钮[1]//节[contains(@class,'chooseplantitle')]//按钮[2]

zaqlnxep

zaqlnxep6#

List<WebElement> links = driver.findElements(By.xpath("//a[@class='jsx-1291462554']"));

        links.get(0).click();
        //Wait here for some action to happen
        links.get(1).click();

如果button元素替换为:

//a[@class='jsx-1291462554']/button

如果按钮的单击操作更改了dom,您可能会遇到staleelementreference,在这种情况下,您可能需要在选择第二个之前再次重新提取(findelements)。

相关问题