Какой локатор я могу использовать, чтобы щелкнуть элемент span через селен - PullRequest
0 голосов
/ 08 сентября 2018

Какой локатор я могу использовать для ниже?

<span class="tile-name ng-binding">Payment Partner</span>

Обновление из комментариев ОП:

Код пробной версии 1:

driver.findElementByXPath("//span[text()='Payment Partner']").click(); 

Ошибка:

Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible;

Код пробной версии 2:

driver.findElementByCssSelector("Payment Partner").click(); 

Ошибка:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"Payment Partner"}

Код пробной версии 3:

WebDriverWait wait = new WebDriverWait(driver, 20);wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath ("//span[text()='Payment Partner']')")));

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

В соответствии с HTML , которым вы поделились, чтобы найти тег <span>, так как элемент является элементом Angular , который вы должны вызвать WebDriverWait для элемент , доступный для нажатия , и вы можете использовать любое из следующих решений:

  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='tile-name ng-binding' and contains(.,'Payment Partner')]"))).click();
    
  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.tile-name.ng-binding"))).click();
    

Обновление

В соответствии с обновлением ошибки для вызова click() вы можете использовать следующее решение:

  • xpath

    WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='tile-name ng-binding' and contains(.,'Payment Partner')]")));
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", myElement); 
    

Подробное обсуждение можно найти в Selenium Web Driver & Java. Элемент не активен в точке (36, 72). Другой элемент получит клик:

0 голосов
/ 10 сентября 2018

Ниже приведены дисперсии, которые можно использовать для вышеуказанной строки HTML:

  1. Xpath: //span[text()='Payment Partner']

  2. Xpath: //span[@class='tile-name ng-binding']

  3. Xpath: //span[contains(@class,'tile-name')]

  4. Xpath: //span[contains(@class,'ng-binding')]

  5. Xpath: //span[contains(@class,'tile-name') and text()='Payment Partner']

  6. CssPath: span[class='tile-name ng-binding']

Я могу добавить больше, если будет родительский элемент.

Надеюсь, это полезно.

...