java - Twitter 中的 Get.text()

标签 java selenium

我正在尝试获取 Twitter 中登录错误消息的文本。

Twitter 这部分的 HTML 代码:

<div class="message-inside">
    <span class="message-text">The email or password doesn't match.</span>
  </div>

然后我使用了:

String message = driver.findElement(By.xpath("/html/body/div[2]/div/div/span")).getText();

其中xpath是Mozilla的inspect元素给出的xpath。但是,String 消息是空的。

PS: 在调用 getText 的那一刻,消息没有被隐藏,所以我不认为这是问题所在

编辑:我也尝试了 .getAttribute("innerHTML") 而不是 .getText(),但同样失败了

最佳答案

永远不要用 sleep 解决此类问题:它不可靠(如果元素比 sleep 长度晚 1 毫秒出现怎么办?)并且会减慢您的测试速度(如果元素在 sleep 开始后 10 毫秒出现怎么办?您浪费了 990 毫秒,并且在许多测试中它加起来了) .

相反,使用显式等待模式来等待文本出现:

WebDriverWait wait = new WebDriverWait(driver, 10); // wait for max 10 sec
String message =  wait.until(ExpectedConditions. visibilityOfElementLocated(By.xpath("/html/body/div[2]/div/div/span")).getText();

通过这种方式,您可以告诉 selenium 最多等待 10 秒的元素,但如果元素在此之前出现,它将返回得更快。

另一件事:像 /html/body/div[2]/div/div/span 这样的 xpath 不是你通常应该使用的东西(有些情况是不可避免的,但很少见)。为什么:

  • 首先从路径上看,你无法判断你选择的是什么。因此,如果 HTML 发生变化,您将很难弄清楚这条语句之前做了什么。
  • 按索引选择(例如 div[2])是非常容易崩溃的:只要再多一个 div 出现在您选择的那个之上,您的 xpath 就会崩溃
  • 您很少需要选择绝对路径。专注于重要的部分。

例如,您要选择的内容在 Twitter 上看起来像这样:

 <div class="alert-messages" id="message-drawer" style="top: -40px;">
     <div class="message ">
         <div class="message-inside">
             <span class="message-text"></span>
         </div>
     </div>
 </div>

所以一个更有意义的 xpath 应该是

//div[@id='message-drawer']//span[@class='message-text']

它告诉您正在查看页面的哪一部分 - message-drawer(id 最适合识别事物 - 它始终是唯一的)。您对该部分中的哪个元素感兴趣。就是这样。如果页面上的任何内容发生变化,您大多不会在意。即使您这样做,xpath 也会清楚地告诉您您选择的目的,因此更容易理解它的含义。

关于java - Twitter 中的 Get.text(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53508084/

相关文章:

java - Spring Data JPA 如何为多个实体构建通用存储库?

java - 如何在 Java 中获取 appengine 实体大小

java - Selenium 选择第一个日期选择器正在工作,但没有选择第二个

c# - Selenium WebDriver - 如果元素存在则选择它,如果不存在则忽略它并继续下一个元素

Java - 通过 TCP 套接字传输 BufferedImage

java - 在 Spring MVC 中调度任务

java - 如何在 selenium webdriver 的文本字段中一个一个地输入字符?

java - 在 QAF 中获取 webelement 文本

python - 在 python 下的 webdriver 2.4 中,用于 Select 对象的正确导入语句是什么?

python - 使用 Selenium 从缓存中提取媒体文件