当前位置: 首页 > 知识库问答 >
问题:

无法使用带有Selenium/testNG的xpath节点获取yt频道名称

吕德惠
2023-03-14

我的任务是打开浏览器,转到YT,输入搜索词“qtp”,单击“搜索”按钮。在结果页面上,我想获取频道名称。为了实现这一点,我使用Firebug应用程序来获取第1个3通道名称的以下路径:

当我使用Selenium/testNG执行以下代码时,我捕获了异常,该异常状态为“未找到元素”。我仅使用Selenium(没有TestNG)尝试了类似的代码,但仍然不起作用。使用WebDriver进行了尝试,仍然不起作用。

我知道节点可能有问题,但我无法解决。

使用的罐子: 硒-服务器-独立-2.35.0.jar,junit-4.10.jar,硒-java-2.35.0.jar,硒-服务器-2.35.0.jar;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.SeleneseTestCase;
import com.thoughtworks.selenium.SeleniumException;


public class YT1 extends SeleneseTestCase{
@BeforeTest
public void beforeTest(){
System.out.println("Before");
selenium = new DefaultSelenium("localhost", 4444,"*firefox","http://www.youtube.com"); 
    selenium.start();
}

@Test
public void myTest() throws Exception{
    System.out.println("Test");
    selenium.open("/");
    selenium.type("//*[@id='masthead-search-term']", "qtp");
    selenium.click("//*[@id='search-btn']");
    Thread.sleep(3000);
    try {
    System.out.println(selenium.getText("//html/body/div[2]/div[4]/div/div[3]/div/div/div[2]/div[2]/div[2]/div[2]/ol/li[1]/div[2]/div/ul/li/a"));
    }
    catch (SeleniumException se1){
        System.out.println("Element not Found because: " + se1);
    }
    try {
    System.out.println(selenium.getText("//html/body/div[2]/div[4]/div/div[3]/div/div/div[2]/div[2]/div[2]/div[2]/ol/li[2]/div[2]/div/ul/li/a"));
        }
        catch (SeleniumException se2){
            System.out.println("Element not Found because: " + se2);
        }
    try {
        System.out.println(selenium.getText("//html/body/div[2]/div[4]/div/div[3]/div/div/div[2]/div[2]/div[2]/div[2]/ol/li[3]/div[2]/div/ul/li/a"));
        }
        catch (SeleniumException se3){
            System.out.println("Element not Found because: " + se3);
    }
}
@AfterTest
public void ShutDown(){
    System.out.println("After Test");
    selenium.close();
}

}

共有2个答案

巫坚白
2023-03-14

@pault解决方案的替代方法是使用CSS。它更干净,更快,更具可读性。

div#results > ol#search-results > li > div.yt-lookup-content > div.yt-lookup-meta a.yt-user-name
尉迟鸿熙
2023-03-14

我将使用以下XPath表达式:

.//div[@id="results"]
    /ol[@id="search-results"]/li
        /div[contains(@class, "yt-lockup-content")]
            /div[contains(@class, "yt-lockup-meta")]
                //a[contains(@class, "yt-user-name")]
 类似资料:
  • 我已经掌握了XPath的基本知识,但在确定以下内容是否可以在使用XPath的C代码中实现时遇到了一些困难(或者我是否需要将其转移到其他代码中,正如我目前所做的那样)。 我有一个XML文档,它由以下结构组成: 其中有多个设置参数值。现在我需要做的只是检索那些包含name属性某些值的setParameter节点。我可能有这些值的可能匹配列表,但它们不会是完全匹配,它们将是节点的name属性必须包含的值

  • 找不到我的问题的解决方案。我有要识别的节点,我的意思是-我必须获得以下情况下的节点名称: 当我使用以下语法时(FirePath,直接从浏览器) 或 然后我得到节点名称(链接组和文本img)。 在robot框架中,它不适用于关键字Get Text或Get Value。我收到消息:“InvalidSelectorException:消息:无效选择器:由于以下错误,无法找到xpath表达式名称为((//

  • 你们这些家伙,我有这样一个HTML: 这是将上述所有选项放入列表的代码: 实际上它不起作用。我不知道我错在哪里。请帮帮我。非常感谢。

  • 我有一个SVG文档,其中包含类似于以下内容的节点: 我想做的只是选择

  • 我想获取具有Id的单个频道的所有视频。我只得到频道信息的问题。这是我正在使用的链接: https://g data . YouTube . com/feeds/API/users/UCD CIB _ pnqpr 0m _ kkdg 4d z5 a?v=2