Как нажать на элемент с текстом как Edit? - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь использовать Selenium WebDriver, чтобы нажать кнопку со следующим HTML-кодом:

<a class="uir-item-edit" href="/app/accounting/transactions/transaction.nl?id=400000&amp;e=T" 
id="edit_/app/accounting/transactions/transaction.nl?id=400000" 
aria-label="Edit Sales Order:300000 / 400000 ">Edit</a>

Мой код:

driver.findElement(By.cssSelector("a[aria-label *= 'Edit Sales Order']")).click();

Мне нужно идентифицировать по метке Ariaпоскольку все остальные компоненты либо имеют дубликаты, либо меняются с номером.

Должно быть, что-то не так с моим селектором CSS, но я не могу понять это.

Дайте мне знать, если я должен включить коды ошибок, дополнительную информацию или я что-то сделалневерно с постом.Спасибо!

Редактировать: метка арии также меняется, и расположение в HTML также меняется, поэтому я не могу использовать xpath.Ответ DebanJanB ниже щелкает по элементу, но только когда я вручную наведите курсор мыши.

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.uir-item-edit[aria-label^='Edit Sales Order'][id*='transactions']"))).click();

Ответы [ 4 ]

0 голосов
/ 20 сентября 2019

Удаляйте пробелы из вашего селектора CSS до * и после =, чтобы вместо a[aria-label *= 'Edit Sales Order'] у вас было a[aria-label*='Edit Sales Order']

Воспроизведено, исправлено и проверено в http://try.jsoup.org/~x6PCZNOcp6NnwKPFJN-IdR5gkJk

0 голосов
/ 20 сентября 2019

Я могу дать вам работу, я знаю, что вы ищете ответ для CSS, но вы также можете попробовать следующее решение xpath:

driver.findElement (By.xpath ("// * [@ class = 'uir-item-edit '] ")). click ();

driver.findElement (By.xpath (" // * [@ class =' ​​uir-item-edit '] [@ aria-label] ")). click ();

driver.findElement (By.xpath (" // * [@ aria-label = 'Редактировать заказ на продажу: 300000/400000'] ")). click ();

driver.findElement (By.xpath ("// * [содержит (текст (), 'Изменить')]")). Click ();

Да, поделитесь пожалуйстаинформация об ошибке, удачи

0 голосов
/ 20 сентября 2019

К click() на элементе с текстом как Редактировать Вам необходимо использовать elementToBeClickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.uir-item-edit[aria-label^='Edit Sales Order'][id*='transactions']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='uir-item-edit' and starts-with(@aria-label, 'Edit Sales Order')][contains(@id, 'transactions') and text()='Edit']"))).click();
    
0 голосов
/ 20 сентября 2019

Вы можете использовать class = "uir-item-edit" .В селекторе CSS вы должны использовать целое значение, например: Редактировать заказ клиента: 300000/400000 .Попробуйте это

...