Как найти вложенные элементы по классам в Selenium - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть div внутри div внутри другого div.Самый внешний класс div - это «Big Div», внутри него есть div с классом «Medium Div», а самый внутренний класс div - «Small Div».

Я могу видеть классы div, когдаЯ нажимаю клавишу F12 и наводю курсор на элементы, однако не могу найти их с помощью Selenium.

Что я делаю не так?

WebElement big = browser.findElement(By.cssSelector("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.cssSelector("//div[contains(@class,'Medium')"));
WebElement small = medium.findElement(By.cssSelector("//div[contains(@class,'Small'"));

Примечание: мои классы содержат пробелы,Selenium не может найти ни одного из элементов div, и я получаю исключение: «Нет такого элемента».

Ответы [ 4 ]

1 голос
/ 27 сентября 2019

Синтаксические ошибки в размещении скобок и используемом типе локатора.Попробуйте код ниже,

WebElement big = browser.findElement(By.xpath("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.xpath("//div[contains(@class,'Medium')]"));
WebElement small = medium.findElement(By.xpath("//div[contains(@class,'Small')]"));
1 голос
/ 26 сентября 2019

Синтаксис, который вы использовали, не для cssSelector, а для XPATH, и вы также пропустили скобки.

Попробуйте выполнить xpath сейчас.

WebElement big = browser.findElement(By.xpath("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.xpath(".//div[contains(@class,'Medium')]"));
WebElement small = medium.findElement(By.xpath(".//div[contains(@class,'Small')]"));

Однако выможет сделать это за один раз, как.

WebElement small = browser.findElement(By.xpath("//div[contains(@class,'Big')]//div[contains(@class,'Medium')]//div[contains(@class,'Small')]"));
1 голос
/ 27 сентября 2019

Я хотел бы добавить несколько строк к ответу @ KunduK

WebElement small = browser.findElement(new ByChained(By.xpath("//div[contains(@class,'Big')]"),By.xpath("//div[contains(@class,'Medium')]"),By.xpath("//div[contains(@class,'Small')]")));

Когда селен уже дает несколько дополнительных реализаций, тогда почему бы не использовать его.: -)

Более подробную информацию можно получить по ссылке ниже:

Как работает класс Selenium ByChained?

https://www.linkedin.com/pulse/selenium-classes-stabilize-ui-automation-code-durga-behera/

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

В локаторе отсутствуют скобки:

WebElement big = browser.findElement(By.cssSelector("div[class*='Big']"));
WebElement medium = big.findElement(By.cssSelector("div[class*='Medium']"));
WebElement small = medium.findElement(By.cssSelector("div[class*='Small')]"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...