Selenium-Java-FireBug:FirePath returns 9 个匹配节点,其中 List<WebElement> 返回 18 个元素
Selenium-Java-FireBug : FirePath returns 9 matching nodes where as List<WebElement> is returning 18 elements
FirePath 返回 9 个匹配节点,而 List 返回 18 个元素。
OS: Win8 Pro, 64 bit
Java: jdk1.8.0_77
Selenium: 3.4.0 (selenium-server-standalone)
GeckoDriver: 0.17.0
Browser: Mozilla Firefox 53.0
IDE: Eclipse Neon.2 Release (4.6.2)
FireBug: 2.0.18
URL: https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx
XPATH: //table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td
我正在尝试从 多选列表框中获取项目数 。当我在 FireBug/FirePath 中提供 xpath
时,它 returns 我 "9 个匹配节点".
继续前进,通过我的脚本,我将 WebElements 添加到类型为 WebElement[=] 的 generic List 中60=] 通过 findElements
方法。接下来,当我为 List<WebElement>
调用 size()
方法时,它 returns 我 18 Elements
更新:
(抱歉,我在提出问题时犯了一个错误,同时试图缩小到确切的问题范围)
这是完整的问题。
所需步骤:
- 访问URL。
- 点击
Selection mode
作为 Multiple
- 从
Phone features
table,我需要selectBlue Tooth
、Memory Card Slot
和Touch screen
。列表可能会有所不同,所以我想将其保存在 List<String>
. 中
这是我的脚本:
package demo;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Q45065876_keyDown {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.navigate().to("https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx");
driver.findElement(By.xpath("//input[@id='ContentHolder_lbSelectionMode_I']")).click();
List<WebElement> selection_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbSelectionMode_DDD_L_LBT']/tbody/tr/td"));
for (WebElement ele:selection_list)
{
if(ele.getAttribute("innerHTML").contentEquals("Multiple"))
ele.click();
break;
}
driver.findElement(By.id("ContentHolder_lbSelectionMode_DDD_L_LBI1T0")).click();
List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"));
System.out.println("Number of Elements : "+phone_feature_list.size());
List<String> item_list = new ArrayList<String>();
item_list.add("Bluetooth");
item_list.add("Memory Card Slot");
item_list.add("Touch screen");
System.out.println("Number of Elements : "+item_list.size());
for (int i=0; i<phone_feature_list.size(); i++)
{
WebElement my_element = phone_feature_list.get(i);
String innerhtml = my_element.getAttribute("innerHTML");
System.out.println("INNER HTML : "+innerhtml);
for (int j=0; j<item_list.size(); j++)
{
item_list.get(j).contentEquals(innerhtml);
my_element.click();
}
}
}
}
你能帮我弄清楚这里发生了什么问题吗?谢谢大家的帮助。
站点刷新需要一两秒钟。 xpath
"//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"
包含这些复选框,因此您将获得 18 个结果。您可以等到有不同数量的结果
List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"));
int size = phone_feature_list.size();
// choose an option from the dropdown
// wait for the size to change
while ((phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"))).size() == size);
System.out.println("Number of Elements : " + phone_feature_list.size());
FirePath 返回 9 个匹配节点,而 List 返回 18 个元素。
OS: Win8 Pro, 64 bit
Java: jdk1.8.0_77
Selenium: 3.4.0 (selenium-server-standalone)
GeckoDriver: 0.17.0
Browser: Mozilla Firefox 53.0
IDE: Eclipse Neon.2 Release (4.6.2)
FireBug: 2.0.18
URL: https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx
XPATH: //table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td
我正在尝试从 多选列表框中获取项目数 。当我在 FireBug/FirePath 中提供 xpath
时,它 returns 我 "9 个匹配节点".
继续前进,通过我的脚本,我将 WebElements 添加到类型为 WebElement[=] 的 generic List 中60=] 通过 findElements
方法。接下来,当我为 List<WebElement>
调用 size()
方法时,它 returns 我 18 Elements
更新:
(抱歉,我在提出问题时犯了一个错误,同时试图缩小到确切的问题范围)
这是完整的问题。
所需步骤:
- 访问URL。
- 点击
Selection mode
作为Multiple
- 从
Phone features
table,我需要selectBlue Tooth
、Memory Card Slot
和Touch screen
。列表可能会有所不同,所以我想将其保存在List<String>
. 中
这是我的脚本:
package demo;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Q45065876_keyDown {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.navigate().to("https://demos.devexpress.com/aspxeditorsdemos/ListEditors/MultiSelect.aspx");
driver.findElement(By.xpath("//input[@id='ContentHolder_lbSelectionMode_I']")).click();
List<WebElement> selection_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbSelectionMode_DDD_L_LBT']/tbody/tr/td"));
for (WebElement ele:selection_list)
{
if(ele.getAttribute("innerHTML").contentEquals("Multiple"))
ele.click();
break;
}
driver.findElement(By.id("ContentHolder_lbSelectionMode_DDD_L_LBI1T0")).click();
List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"));
System.out.println("Number of Elements : "+phone_feature_list.size());
List<String> item_list = new ArrayList<String>();
item_list.add("Bluetooth");
item_list.add("Memory Card Slot");
item_list.add("Touch screen");
System.out.println("Number of Elements : "+item_list.size());
for (int i=0; i<phone_feature_list.size(); i++)
{
WebElement my_element = phone_feature_list.get(i);
String innerhtml = my_element.getAttribute("innerHTML");
System.out.println("INNER HTML : "+innerhtml);
for (int j=0; j<item_list.size(); j++)
{
item_list.get(j).contentEquals(innerhtml);
my_element.click();
}
}
}
}
你能帮我弄清楚这里发生了什么问题吗?谢谢大家的帮助。
站点刷新需要一两秒钟。 xpath
"//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td"
包含这些复选框,因此您将获得 18 个结果。您可以等到有不同数量的结果
List<WebElement> phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"));
int size = phone_feature_list.size();
// choose an option from the dropdown
// wait for the size to change
while ((phone_feature_list = driver.findElements(By.xpath("//table[@id='ContentHolder_lbFeatures_LBT']/tbody/tr/td[contains(@class, 'dxeT')]"))).size() == size);
System.out.println("Number of Elements : " + phone_feature_list.size());