Java 如何使用Selenium在带有框架的网站上查找元素?

Java 如何使用Selenium在带有框架的网站上查找元素?,java,selenium,automation,frame,Java,Selenium,Automation,Frame,我试图在一个包含框架的网站上找到一个元素(包含“791”)(但是该元素位于顶部窗口)。由于某些原因,硒找不到元素。找到它的正确方法是什么? 谢谢 公共类StarOnline{ 静态网络驱动程序; 静态字符串baseUrl; 公共静态void main(字符串[]args)引发InterruptedException{ baseUrl=”https://www.staronline.org.uk/demo_register.asp"; System.setProperty(“webdriver.c

我试图在一个包含框架的网站上找到一个元素(包含“791”)(但是该元素位于顶部窗口)。由于某些原因,硒找不到元素。找到它的正确方法是什么? 谢谢

公共类StarOnline{
静态网络驱动程序;
静态字符串baseUrl;
公共静态void main(字符串[]args)引发InterruptedException{
baseUrl=”https://www.staronline.org.uk/demo_register.asp";
System.setProperty(“webdriver.chrome.driver”,“C:\\Automation\\libs\\Drivers\\chromedriver.exe”);
驱动程序=新的ChromeDriver();
get(baseUrl);
列表复选框=driver.findElements(按.className(“.frm”);
System.out.println(“列表大小=“+checkbox.size());
for(WebElement:复选框)
{
if(ell.getText()包含(“791”))
单击();
else System.out.println(“未找到元素”);
打破
}

这不是这个问题的直接答案,只是一种方法。我们需要使用switchToFrame方法

如果你需要切换到你现在所在的框架的兄弟,我们可能需要从所有帧中出来,然后从根切换到那个兄弟帧。

从根目录切换到第1帧:

driver.switchTo().frames("Frame 1");
切换到第1帧之外的第2帧:

//Come to root from Frame 1
driver.switchTo().defaultContent();

//Now switch to Frame 2
driver.switchTo().frames("Frame 2");
这也适用于嵌套框架/iFrame。希望这有帮助


谢谢。

您试图定位的元素是下拉列表中的
选项
元素,id为
mainstar
。下拉列表位于
顶部窗口
上,因此您无需切换到任何框架来定位元素。因此,我们将通过
选择文本为
791
的选项selectByValue()
方法的
Select
类。如果仔细观察,文本为
791
的选项包含可见文本
Alcohol Star
。因此,当我们选择该选项时,将从下拉列表中选择
Alcohol Star
。以下是最小的代码:

package demo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class Q45770184_frame 
{
    static WebDriver driver;
    static String baseUrl;

    public static void main(String[] args) 
    {

    baseUrl = "https://www.staronline.org.uk/demo_register.asp";
    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get(baseUrl);
    WebElement drop_down = driver.findElement(By.id("mainstar_"));
    Select select = new Select(drop_down);
    select.selectByValue("791");
    }   
}

您能否更新您提供的url中包含文本
791
的元素?
package demo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

public class Q45770184_frame 
{
    static WebDriver driver;
    static String baseUrl;

    public static void main(String[] args) 
    {

    baseUrl = "https://www.staronline.org.uk/demo_register.asp";
    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get(baseUrl);
    WebElement drop_down = driver.findElement(By.id("mainstar_"));
    Select select = new Select(drop_down);
    select.selectByValue("791");
    }   
}