السيلينيوم 2 - تبديل التركيز إلى إطار ليس له اسم/معرف

StackOverflow https://stackoverflow.com/questions/3549584

سؤال

حتى الآن أحاول معرفة كيف يمكنني التبديل إلى إطار في السيلينيوم 2 عندما لا يكون للإطار اسم أو معرف؟ للحصول على إطار مسمى أفعله:

driver.SwitchTo().Frame(FrameName);

ولكن ما لا يوجد اسم؟ أي شخص لديه خبرة في هذا؟

هل كانت مفيدة؟

المحلول

driver.switchto.frame () هو تم تحميله لقبول اسم الإطار أو عدد صحيح. هذا int هو فهرس يعتمد على 0 للإطارات المتاحة. سيكون الإطار الأول 0 ، والثاني 1 وما إلى ذلك.

لقد قمت فقط بإجراء اختبار سريع حقًا باستخدام Java Binding و Firefox مقابل صفحة HTML هذه.

<html>
<frameset rows="50%,50%">
    <frame src="frame_a.htm" />
    <frame src="frame_b.htm" />
</frameset>
</html>

أنا قادر بنجاح على استخدام Driver.switchto (). الإطار (0) ؛ للإشارة إلى الإطار A و Driver.switchto (). الإطار (1) ؛ للوصول إلى الإطار ب.

نصائح أخرى

يمكنك استخدام فهرس الإطار. نظرًا لأنه ليس لديك اسم ومعرّف للإطار ، Frame.switchto ().

في السيلينيوم إذا كنت تعلم أن الموقع النسبي للإطار ، يجب أن تكون قادرًا على استخدام أمر selectframe مع السلسلة "REPATING = UP" لنقله إلى أعلى إطار على سبيل المثال selenium.SelectFrame("relative=up"); أو للقفز إلى الإطار العلوي ، استخدم "REPANTION = TOP"

يمكنك فقط إعطاء معرف iframe الخاص بك بدلاً من اسم iframe.

يرجى الاطلاع على مثال أدناه ، لقد نجحت بالنسبة لي.
في المثال ، أقوم بالتبديل إلى iframe واحد في صفحتي والنقر فوق العنصر في هذا iframe ، وهو "ورقة العمل 0".

استخدم الرمز:

driver.switchTo().frame("topframe");    
    WebElement worksheet0 = driver.findElement(By.xpath("//*@id='reportSelect:Worksheet_lbl']"));               worksheet0.click();             

htmlof iframe:

  < iframe id="topframe" height="83px" frameborder="0" width="100%" scrolling="NO" '1331808552380'"="" +="" src="initialize.do?init=header&cacheBuster=" name="topframe" marginheight="0" marginwidth="0">

بالإضافة إلى استخدام الفهرس (كما تشير الإجابات الأخرى) ، في ج# يمكنك تحديد iframe بواسطة tagname. مثالي يفترض أن هناك واحدة واحدة فقط من iFrame على الصفحة.

try
{
    var iFrameElement = Driver.FindElementByTagName("iFrame");
    var driver = Driver.SwitchTo().Frame(this.iFrameElement);    
    var element = driver.FindElement(selector);

    // do what you need with the element
}
finally
{
    // don't forget to switch back to the DefaultContent
    Driver.SwitchTo().DefaultContent();
}

ملاحظة: يجب عليك الحصول على المعلومات من iwebelement .text أو .click على سبيل المثال ، قبل استدعاء driver.switchto (). defaultContent () ؛

لقد قمت بإنشاء طرق الإضافات هذه للمساعدة

public static IWebDriver SwitchToIFrame(this RemoteWebDriver driver)
{
    // http://computerrecipes.wordpress.com/2012/08/23/selenium-webdriver-interact-with-an-element-inside-an-iframe/
    // http://stackoverflow.com/questions/3549584/selenium-2-switching-focus-to-a-frame-that-has-no-name-id
    var iFrameElement = driver.FindElementByTagName("iFrame");
    return driver.SwitchTo().Frame(iFrameElement);
}

public static void SwitchOutOfIFrame(this IWebDriver driver)
{
    driver.SwitchTo().DefaultContent();
}

مثال على استخدام أساليب الامتدادات:

public void ClickPrintButton()
{
    var iFrameDriver = Browser.Driver.SwitchToIFrame();
    try
    {
        iFrameDriver.FindElement(By.Id("saveButton")).Click();
    }
    finally
    {
        Browser.Driver.SwitchOutOfIFrame();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top