Я работал над чтением писем из gmail с помощью веб-драйвера, и между ними я обнаружил разницу между By.id и By.tagname.
Я пытаюсь получить доступ к "таблице" с идентификатором ": pg".Поэтому я могу
- Либо использовать By.id (": pg")
- ИЛИ использовать By.tagname ("таблица") и искать элемент с идентификатором: pg
Вот код для обоих случаев.
By.id:
WebDriver webDriver = new FirefoxDriver();
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
webDriver = webDriver.switchTo().frame("canvas_frame");
WebElement table1 = webDriver.findElement(By.id(":pg"));`
Над кодом я непосредственно получаю элемент с идентификатором ": pg"
By.tagname:
WebDriver webDriver = new FirefoxDriver();
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> tables = webDriver.findElements(By.tagName("table"));
for(WebElement table2: tables){
String id = table2.getAttribute("id");
System.out.println("id: "+ id);
if(id != null && id.equals(":pg")){
System.out.println("FOUND IT!!!");
}
}
Выше кода я нахожу все элементы с тэгом table и затем вижу, какой из них имеет идентификатор ": pg".
Обаэти фрагменты кода по сути делают то же самое, но используют разные способы (By.id или By.tagname).Однако первый фрагмент кода, который использует By.id, всегда завершается успешно, в то время как второй фрагмент кода, который использует By.tagname, почти всегда завершается неудачей.(Это будет работать с дополнительным ожиданием, однако)
Почему эта разница между By.id и By.tagname?
Спасибо, Крис.