【问题标题】:Unable to locate element: {"method":"xpath","selector":"//*[@id='content column']无法定位元素:{"method":"xpath","selector":"//*[@id='content column']
【发布时间】:2023-04-08 04:03:01
【问题描述】:

即使 xpath 是正确的,以下代码也会给我一个错误:

无法定位元素:{"method":"xpath","selector":"//*[@id='content column']...

我假设该字段中有多个 xpath。这是代码。

driver.get("https://marswebtdc.tdc.vzwcorp.com/cdl/lte/fdr_llc/fdr.jsp?3gOr4g=4g");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

try {
    int i = 5;
    String strI = Integer.toString(i);

    WebElement element = driver.findElement(By.xpath("//*[@id='content column']/table[1]/tbody/tr/td/form/b/table/tbody/tr/td/table/tbody/tr[2]/td[4]/input"));
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", element);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.findElement(By.xpath("//*[@id='content column']/table[1]/tbody/tr/td/form/b/table/tbody/tr/td/table/tbody/tr[2]/td[4]/input")).sendKeys(strI);

    Thread.sleep(3000);
    }
catch(Exception e){
    System.out.println("Elemnt Not Found : "+e.getMessage());
}

HTML sn-p

<table align="left" width="100%" border="1"  bgColor=#ffffff borderColorDark='white' borderColorLight='gray' cellpadding='2' cellspacing='0'><tr><td>
    <table border='0' bgColor=#ffffff width="100%">
        <tr>
            <td colspan="4" align="left" nowrap>(Data available 07/30/2014 to 01/26/2015)</td>
            <td rowspan="3" valign="top" align="center">
                <input type="submit" name="action" value="Search"><br/>    
                <input type="reset" name="action" value=" Reset "><br/>    
                <input type="button" name="action" value=" Print " onClick="Print_onClick()"><br/>    
        <input type="button" name="action" value="Download CSV" onClick="parent.frames['results'].download_result()" disabled><br>
            </td>
        </tr>

        <tr>
            <td align="right" valign="top">Begin Date:</td>
            <td valign="top">
                <input type="text" name="txtBeginDate" value='01/26/2015' size="10" maxlength="10"
                       onBlur="doFormatDate(this)">
            </td>
            <td align="right" valign="top">MDN:</td>
            <td valign="top"><input type="text" name="txtMsid" value="" size="15" maxlength="15"  onKeyUp="removeStuff(this)" onBlur="removeStuff(this)" onPaste="return removeStuff(this)"></td>

formformjava`

function validate(form)
{
    var msg = "";
    var bDate = form.txtBeginDate.value;
    var eDate = form.txtEndDate.value;
    var abDate = form.abd.value;
    var aeDate = form.aed.value;
    var msid = form.txtMsid.value;

    if (!validDate(bDate))
        msg += "o  Begin Date is not a valid date.\n";
    if (!validDate(eDate))
        msg += "o  End Date is not a valid date.\n";
    if (compareDate(bDate, eDate))
        msg += "o  Begin Date must be less than or equal to End Date.\n";
    if (compareDate(abDate, bDate) || compareDate(eDate, aeDate))
        msg += "o  Date entered are out of the available date range.\n";
    if (calculateDays(bDate, eDate) > 30) 
        msg += "o  Date range cannot be more than 30 days.\n";

    if (isBlank(msid))
        msg += "o  MDN must be entered.\n";
    if (!isNumber(msid) || (msid.length > 0 && msid.length < 10))
        msg += "o  MDN must be numeric and 10 digits in length.\n";
    if (!isAllowedPhoneNumber(msid) ){
        msg += "o  MDN " + msid + " is not an allowed value.\n";
    }
    if (msg > "") {
        msg = "Problems with data entry:\n" + msg;
        alert(msg);
        return false;
    }
    else {
        if (!toggleSearch(false)) {
            msg = "A search is pending! No new search may be issued until pending search returns.\n";
            alert(msg);
            return false;
        }
        else
            return true;
    }
}
</script>
<!--</head><body>-->

        <td colspan="4" align="left" nowrap>(Data available 07/31/2014 to 01/27/2015)</td>
        <td rowspan="3" valign="top" align="center">
            <input type="submit" name="action" value="Search"><br/>    
            <input type="reset" name="action" value=" Reset "><br/>    
            <input type="button" name="action" value=" Print " onClick="Print_onClick()"><br/>    
    <input type="button" name="action" value="Download CSV" onClick="parent.frames['results'].download_result()" disabled><br>
        </td>
    </tr>

    <tr>
        <td align="right" valign="top">Begin Date:</td>
        <td valign="top">
            <input type="text" name="txtBeginDate" value='01/27/2015' size="10" maxlength="10"
                   onBlur="doFormatDate(this)">
        </td>
        <td align="right" valign="top">MDN:</td>
        <td valign="top"><input type="text" name="txtMsid" value="" size="15" maxlength="15"  onKeyUp="removeStuff(this)" onBlur="removeStuff(this)" onPaste="return removeStuff(this)"><enter code here/td>

【问题讨论】:

  • 你试过css选择器吗?
  • 是的,我做了,它不起作用
  • 你的 css 选择器值是多少?请告诉
  • 它不止一个。


  • 您只需右键单击相应的 标记,然后单击获取 css 路径。并将其用作 CSS 选择器。使用 chrome 执行此操作。

标签: java html xpath selenium-webdriver css-selectors


【解决方案1】:

如果你想定位“MDN: textfield”(如前cmets中提到的),请尝试以下xpaths:

1- //input[@name='txtMsid']

这将找到名称属性为“txtMsid”的输入元素

2-//td[contains(text(),'MDN')]/following-sibling::td[1]/input

这将定位到 td 元素下的 input 元素,即 'td' 元素的第一个兄弟元素,其中包含作为 'MDN' 的 innerHTML/text

【讨论】:

  • 是css选择器吗?谢谢你的帮助。但它仍然得到同样的错误:无法找到元素。 driver.findElement(By.cssSelector("//td[contains(text(),'MDN')]/following-sibling::td[1]/input")).sendKeys(strI);
  • 完整的 html 链接:view-source:marswebtdc.tdc.vzwcorp.com/cdl/lte/fdr_llc/…
  • 两者都是 xpath。假设您要在该文本字段中发送数据,请尝试使用以下代码:driver.findElement(By.xpath("//input[@name='txtMsid']")).sendKeys("your data to input"); -----或------driver.findElement(By.xpath("//td[contains(text(),'MDN')]/following-sibling::td[1]/input")).sendKeys("your data to input");跨度>
  • 仍然给出同样的错误:无法定位元素
  • 我添加了更多的 html。请告诉我
【解决方案2】:

不要使用 xpath,尤其是你的。难以理解、阅读、维护等。阅读关于css selectors .如果我正确理解了您需要找到哪个元素,您可以尝试下一个选择器:

driver.findElement(By.Css("input#3gOr4g")); 

或者像这样 =)

【讨论】:

  • 另外,您的 xpath 可能无效并且确实无法找到元素。在浏览器中尝试。并更好地使用 css 选择器
  • css 仍然不起作用。这是我需要的元素:
  • 有趣。是否抛出异常?什么样的?这个元素在页面上可见/存在吗?或者你需要点击其他,以便 elem 变得可见/或出现在页面上?附:我在选择器中做了一个小类型。对于您的元素选择器应该像 ("input[name='txtMsid']")
  • 好吧,如果它们都可以使用该选择器找到,它将选择多个文件。在这种情况下,您可以 1)使用索引,例如driver.findElements(By.Css("you selector"))[0] 使用单个元素,2) 要求开发人员为元素添加唯一 id 以简化您的工作 =) 3) 如果可以提供指向完整 html 页面的链接
  • 我查看了它,甚至重新输入了屏幕截图中的文本(部分与
    中的 MDN 文本)。这个选择器 (input[name='txtMsid']) 可以正常工作并选择单个元素。此表单出现在页面上还是单独的对话框中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2019-11-25
  • 2022-06-23
  • 1970-01-01
相关资源
最近更新 更多