Webdriver:通过占位符文本定位类型字段,然后通过 sendkey("test text") 将文本定位到类型字段中

Webdriver: Locate typefield via placeholder text then text via sendkey("test text") into the typefield

每次登录页面时,我一直在尝试将文本发送到具有不断变化的元素 id=PolarisTextField83 的文本字段(PolarisTextField## 不断更改其值,如 id=PolarisTextField45)作为我发现 id 元素是动态的,HTML 唯一静态且唯一的部分是占位符示例文本,即 placeholder="e.g. Shirts".

因此,我想知道是否有一种方法可以定位 placeholder="e.g. Shirts" 然后将文本发送到其各自的类型字段 (PolarisTextField##)?

我试过用

driver.findElementsByTagName("e.g. Shirts").sendKeys("test text");

但了解到我无法在 findElementsByTagName 之后关注 .sendKeys()

我是 java 和 selenium 的新手,希望得到任何帮助 and/or 指导!!

试试下面的 xpath 来处理动态网页元素。

WebDriverWait wait = new WebDriverWait(driver, 30);
driver.findElement(By.xpath("//*[starts-with(@id,'PolarisTextField')]")).sendKeys("Test");

您可以使用 XPath 按占位符值查找元素

driver.findElement(By.xpath("//*[@placeholder='e.g. Shirts']")).sendKeys("test text");

要在元素内发送 字符序列,您可以使用以下任一方法 :

  • 使用 css_selectoridplaceholder 属性:

    driver.findElement(By.cssSelector("[id^='PolarisTextField'][placeholder$='Shirts']")).sendKeys("test text");
    
  • 使用 xpathidplaceholder 属性:

    driver.findElement(By.xpath("//*[starts-with(@id, 'Shirts') and contains(@placeholder, 'Shirts')]")).sendKeys("test text");
    

理想情况下,要在元素中发送 字符序列 ,您必须为 elementToBeClickable() 引入 并且您可以使用以下任一项 :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("[id^='PolarisTextField'][placeholder$='Shirts']"))).sendKeys("test text");
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[starts-with(@id, 'Shirts') and contains(@placeholder, 'Shirts')]"))).sendKeys("test text");