如何对 selenium 执行操作,这取决于显示结果?

5kgi1eie  于 2023-04-12  发布在  其他
关注(0)|答案(2)|浏览(151)

这里有一个搜索结果块列表,我需要根据搜索结果对它执行操作。

<li>
    <div>
        <div> Result1 </div>
        <button> click </button>
    </div>
    <div>
        <div> Result2 </div>
        <button> click </button>
    </div>
    <div>
        <div> Result3 </div>
        <button> click </button>
    </div>
    <div>
        <div> Result4 </div>
        <button> click </button>
    </div>
</li>

结果每次都在变化。假设我需要在“Result2”上执行操作,然后根据我的要求,我需要点击相邻的按钮,我如何使用Java + Selenium来做到这一点?

jhiyze9q

jhiyze9q1#

下面的XPATH表达式定位<button>节点,该节点是包含文本“Result2”的<div>节点的后续兄弟节点

//div[contains(text(),'Result2')]//following-sibling::button
k4emjkb1

k4emjkb12#

我假设你会不止一次地使用这个或类似的东西。在这种情况下,让我们把这个代码放到一个可重用的方法中,使它更容易使用。

public static void clickResult(String result) {
    new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.xpath(MessageFormat.format("//div[./div[text()='' {0} '']]/button", result))))
        .click();
}

然后说

clickResult("Result2");

在该方法中,
1.我添加了一个等待以确保元素可供单击。
1.我正在动态构建一个XPath来查找包含传入字符串的DIV,例如“Result2”,然后查找相邻的BUTTON。在这里使用contains()时要小心,因为根据“Result2”字符串的复杂程度和您要搜索的内容,您可能最终会抓住错误的元素。如果您知道使用contains()可以正常工作,您可以使用XPath,"//div[./div[contains(text(),''{0}'')]]/button"

相关问题