我试图在包含框架的网站上找到一个元素(包含" 791")(该元素位于顶部窗口中)。由于某种原因,Selenium无法找到该元素。找到它的正确方法是什么? 谢谢!
Vue
答案 0 :(得分:1)
这不是这个问题的直接答案,而只是一种方法。我们需要使用switchToFrame方法。
如果你需要切换到现在的帧的兄弟,我们应该从所有帧中走出来,然后从根切换到那个兄弟帧。例如,考虑下面的图像,
从root切换到第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");
这也适用于嵌套的Frames / iFrames。希望这会有所帮助。
感谢。
答案 1 :(得分:0)
您要查找的元素是下拉列表中的option
元素,id
为mainstar_
。下拉列表位于Top Window
上,因此您无需切换到任何框架以查找元素。因此,我们将选择文本为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");
}
}