Selenium等待指定XPath元素文本显示失败问题求助
解决Selenium等待元素显示指定文本的问题
嘿,我来帮你搞定这个Selenium等待的问题!你的核心问题在于用错了等待方法的参数,而且选的方法本身就不适合等待文本内容。
问题分析
你用了ExpectedConditions.attributeToBe()方法,但这个方法的作用是等待元素的某个属性等于指定值(比如等待按钮的disabled属性变为true),它的参数顺序是:attributeToBe(By locator, String attributeName, String attributeValue)
而你的代码里把目标文本"Hensley and Workman Trading"当成了属性名,"true"当成了属性值,这完全不符合方法的设计逻辑,所以自然起不到等待文本的效果。
正确的解决方案
要等待元素显示指定的精确文本,应该使用ExpectedConditions.textToBe()方法,它专门用来等待匹配定位器的元素文本与目标文本完全一致。
修改后的代码如下:
public static void getWebElementByXpathWithWaitTextToBeSeen() { WebDriver driver2 = WebDriverMgr.getDriver(); // 隐式等待和显式等待不要混用,注释掉是正确的做法 // driver2.manage().timeouts().implicitlyWait(IMPLICIT_WAITE, TimeUnit.SECONDS); WebDriverWait wait = new WebDriverWait(driver2, EXPLICIT_WAITE); // 使用textToBe等待元素文本匹配目标内容 wait.until(ExpectedConditions.textToBe( By.xpath("//td[@class='td_company ng-star-inserted']"), "Hensley and Workman Trading" )); }
额外说明
- 如果你的场景是等待文本包含目标内容(而不是精确匹配),可以改用
ExpectedConditions.textToBePresentInElement()方法,参数是定位器和目标文本片段。 - 确保你的XPath定位器
//td[@class='td_company ng-star-inserted']能唯一匹配到目标元素,如果匹配到多个元素,textToBe()会检查第一个匹配的元素是否符合条件。
内容的提问来源于stack exchange,提问作者Bastian
相关产品推荐
相关产品推荐

