How Can I verify 'Footer Top'(Web Element) background image colour? - list
I am just trying to verifying color for 'footer-top' background image.
Console view for 'footer top' icon is'
Under Styles:
footer .footer-top {
background: #1571c9;
float: left;
margin-top: 55px;
padding: 25px 0;
width: 100%;
Under Elements:
<div class="footer-top">
<div class="sw-layout">
<div class="footer-section">
<h5>More Information</h5>
<ul>
<li>About Us</li>
<li>Contact Us</li>
<li>FAQ</li>
</ul>
</div>
<div class="footer-section hide-for-xs">
<h5>Finance Cards</h5>
<ul>
<div>
<li>Cash Back Finance Cards</li></div>
<li>Points / Rewards Credit Cards</li>
<li>Travel / Air Miles Credit Cards</li>
<li>Islamic Cards</li>
<li>Business Credit Cards</li>
</li>
</ul>
</div><div class="footer-section hide-for-xs">
<h5>Personal Loans</h5>
<ul>
<li>Salary Transfer Loans</li>
<li>Loans Without Salary Transfer
</li>
</ul>
I am using below lines of code :
String FooterTopSectionColour =
driver.findElement(By.className("footer-top")).getCssValue("background");
try {
Assert.assertEquals("#1571c9", FooterTopSectionColour);
System.out.println("Colour matches with : "+
FooterTopSectionColour);
}
catch (Error e)
{e.printStackTrace();
}
In DOM colour is given in Hex value but Selenium is returning in terms of rgb.
You can check below error in console for the same :
java.lang.AssertionError: expected [rgb(21, 113, 201) none repeat scroll 0% 0% / auto padding-box border-box] but found [#1571c9]
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.failNotEquals(Assert.java:513)
at org.testng.Assert.assertEqualsImpl(Assert.java:135)
at org.testng.Assert.assertEquals(Assert.java:116)
at org.testng.Assert.assertEquals(Assert.java:190)
at org.testng.Assert.assertEquals(Assert.java:200)
at tests.homepage.HomePageStepDefinitions.vefify_colour_for_footer_top_section(HomePageStepDefinitions.java:378)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at cucumber.runtime.Utils$1.call(Utils.java:40)
at cucumber.runtime.Timeout.timeout(Timeout.java:16)
at cucumber.runtime.Utils.invoke(Utils.java:34)
at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
at cucumber.runtime.Runtime.runStep(Runtime.java:300)
at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
at cucumber.runtime.model.CucumberFeature.run(CucumberFeature.java:165)
at cucumber.api.testng.TestNGCucumberRunner.runCucumber(TestNGCucumberRunner.java:63)
at cucumber.api.testng.AbstractTestNGCucumberTests.feature(AbstractTestNGCucumberTests.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
So, How can I debug it?
Please once check the code which I have used is correct or not!
And also let me know how to convert hex to rgb and compare it by using selenium? Thanks!
As your DOM colour and the CSS colours are different, you need to convert one format to to other and then you need to compare or assert it.
In the below code, I have added the steps which will convert the RGB values into an Hexa decimal and then assert the condition. And I assume that, if you print 'footerTopSelectionColour' value then it prints in the below format :
rgb(21, 113, 201) none repeat scroll 0% 0% / auto padding-box
border-box
Find the modified lines of your code below :
String footerTopSectionColour = driver.findElement(By.className("footer-top")).getCssValue("background");
try {
// I'm assuming that the value of 'footerTopSelectionColour' value will be like below
// rgb(21, 113, 201) none repeat scroll 0% 0% / auto padding-box border-box
// So first we need to convert colour code from rgb to hexa decimal
String value = footerTopSectionColour.trim();
String[] rgbs = value.split("\\)")[0].split("\\(")[1].split(", ");
long r = Long.parseLong(rgbs[0]);
long g = Long.parseLong(rgbs[1]);
long b = Long.parseLong(rgbs[2]);
String hex = String.format("#%02x%02x%02x", r, g, b);
System.out.println("=> The hex conversion is : "+hex);
// After converting you can assert like below
Assert.assertEquals("#1571c9", hex);
System.out.println("Colour matches with : "+ footerTopSectionColour);
} catch (Exception e) {
e.printStackTrace();
}
I hope this answer helps...
Above ans is working fine in converting value from rgb to hexa but assert statement is failed.
footerTopSectionColour colour is : rgb(21, 113, 201) none repeat scroll 0% 0% / auto padding-box border-box
The hex conversion is : #1571c9
Assert.assertEquals(hex, footerTopSectionColour);
Above line of code is throwing error as it is comparing 2 dissimilar values. So instead , use below assert statement to verify it and it works fine.
Assert.assertEquals("#1571c9", hex);
Related
String format replace by value in character in snprintf
I have the following function piece of code in my ESP8266 based NodeMCU: snprintf ( temp, 800, "<html>\ <head>\ <meta http-equiv='refresh' content='25'/>\ <title>NodeMCU DHT11 Sensor \and Relay Board</title>\ <style>\ body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\ li { margin: 10px 0;}\ </style>\ </head>\ <body>\ <h1>Hello from NodeMCU!</h1>\ <p>Temperature: %02d ℃<br>\ Humidity: %2d %<br></p><ol>\ <li><a href='/control?relay=5&state=%d'>Turn Relay 1 On\/Off</a>\ <li><a href='/control?relay=4&state=%d'>Turn Relay 2 On\/Off</a></ol>\ <p> Uptime: %02d:%02d:%02d </p>\ </body>\ </html>", t, h, !digitalRead(5), !digitalRead(4), hr, min % 60, sec % 60 ); I want to be able to replace text on with off and vice versa based on the state of pin which comes from digitalRead(5). So I don't have to write Turn Relay 1 On/Off and instead I should get the state using digitalRead(pinNum) and set the text on or off based on state.
The ternary (conditional) operator is your friend here. You could treat it as an inline if-statement. The syntax looks like this condition ? val1 : val2 The expression will yield a result depending on condition. If the condition is true it will yield val1, otherwise it will yield val2. You can use this inside of sprintfs argument list to return a string depending on the pin state. snprintf(temp, 800, "... <li><a href='/control?relay=5&state=%d'>Turn Relay 1 %s</a><li> ... ", !digitalRead(5), (digitalRead(5) ? "Off" : "On"); %s is a placeholder for a string and depending on the state of the pin 5 it will be replaced by "On" or "Off"
ui-grid ng-style dynamic height
I got a simple grid used like this : <div id="planningGridDiv" class="gridPatientContent" style="height: 450px;min-height: 300px;" ng-style="{height: showScores ? '150px': '450px'}" ui-grid-resize-columns ui-grid-selection ui-grid-cellNav ui-grid-pinning ui-grid="myData" class="grid"> </div> But when showScores is true and height pass from 450 to 150 px, the grid itself doesn't shrink. The first container see its height changed, but this part no : <div role="grid" ui-grid-one-bind-id-grid="'grid-container'" class="ui-grid-render-container ng-isolate-scope ui-grid-render-container-body" ng-style="{ 'margin-left': colContainer.getMargin('left') + 'px', 'margin-right': colContainer.getMargin('right') + 'px' }" ui-grid-render-container="" container-id="'body'" col-container-name="'body'" row-container-name="'body'" bind-scroll-horizontal="true" bind-scroll-vertical="true" enable-horizontal-scrollbar="grid.options.enableHorizontalScrollbar" enable-vertical-scrollbar="grid.options.enableVerticalScrollbar" aria-multiselectable="true" id="1490734763451-grid-container" style="margin-left: 180px; margin-right: 80px;"> I can't find any solution on doc nor stack overflow, but it seems to me that it should. I can use some help for some pointers.
FYI, I found a solution on another stackoverflow question, but I changed it a bit to fit my needs : $scope.showScoreDiv = function() { $scope.showScores = !$scope.showScores; $timeout(function(){ $scope.gridApi.grid.handleWindowResize(); }, 1); }; So the main idea is to change the height via ng-style on the grid div, and when you fire your event, here showScores = true called by showScoreDiv(), you have to call gridApi.grid.handleWindowResize(). The timeout is just here to give some time to the div to be set to the good height before calling handleWindowResize().
Drupal7 custom menu code in template adds stray div for no reason
I am hoping someone more knowledgeable here can point out what the problem is. I am making a custom menu for Drupal7 for a particular theme I am working on, which is using the menu_views module. Everything works pretty nicely until I pass the view menu entry over to menu_views to parse, in which case drupal adds a broken <div class=">...</div> around the parent UL element of the view menu.. I have gone through the code and don't see how this is even happening.. If I comment out the call to the view parsing, then it doesn't add this DIV, but that view parsing shouldnt' be touching the parent UL element? Here is how the HTML is output: <ul class="sub-menu collapse" id="parent_"> <div class="> <li class=" first=" " expanded=" " active-trail "=" ">Por nome <ul class="menu-content collapsed in " id=" "> <div class="view view-nameofview view-id-nameofview etc "> <div class="view-content "> <div class="item-list "> <ul class="views-summary "> <li>Á </li> </ul> </div> </div> </div> </ul> </div> </ul> Here is the template code that causes this: function bstheme_menu_link__main_menu($variables) { $element = $variables['element']; // resolve conflict with menu_views module if (module_exists('menu_views') && $element['#href'] == '<view>') { return _bstheme_menu_views_menu_link($variables); //<<<< IF I COMMENT OUT THIS THE OUTPUT IS FINE } static $item_id = 0; // Add an ID for easy identifying in jquery and such $element['#attributes']['id'] = 'menu_'.str_replace(' ', '_',strtolower($element['#title'])); if(!empty($element['#original_link']['menu_name']) && $element['#original_link']['menu_name'] == 'main-menu'){ if($element['#original_link']['has_children'] == 1){ $element['#attributes']['data-target'] = "jquery_updates_this"; $element['#attributes']['data-toggle'] = "collapse"; } // add class parent and remove leaf $classes_count = count($element['#attributes']['class']); for($i=0;$i<$classes_count;++$i){ if($element['#attributes']['class'][$i] == 'expanded'){ //$element['#attributes']['class'][$i] = 'collapse'; } if($element['#original_link']['plid'] == 0){ if($element['#attributes']['class'][$i] == 'leaf'){ unset($element['#attributes']['class'][$i]); } } else{ if($element['#attributes']['class'][$i] == 'leaf'){ $element['#attributes']['class'][$i] = ''; } } } } // code to add a span item for the glythicons $switch = $element['#original_link']['has_children']; $element['#localized_options']['html'] = TRUE; if($switch == 1) { $linktext = $element['#title'] . '<span class="arrow"></span>'; } else { $linktext = $element['#title']; } // if there's a submenu, send the parsing to the custom function instead of the main one to wrap different classes if ($element['#below']) { foreach ($element['#below'] as $key => $val) { if (is_numeric($key)) { $element['#below'][$key]['#theme'] = 'menu_link__main_menu_inner'; // 2 lavel } } $element['#below']['#theme_wrappers'][0] = 'menu_tree__main_menu_inner'; // 2 lavel $sub_menu = drupal_render($element['#below']); $element['#attributes']['class'][] = 'menu-toggle'; } //$sub_menu = $element['#below'] ? drupal_render($element['#below']) : ''; $output = l($linktext, $element['#href'], $element['#localized_options']); return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . '</li>'."\n"; } function _bstheme_menu_views_menu_link(&$variables) { // Only intercept if this menu link is a view. $view = _menu_views_replace_menu_item($variables['element']);// <<< MENU VIEWS PARSING if ($view !== FALSE) { if (!empty($view)) { $sub_menu = ''; if ($variables['element']['#below']) { $sub_menu = render($variables['element']['#below']); } return '' . $view . $sub_menu . "\n"; // <<< RETURN PATH } return ''; } return theme('menu_views_menu_link_default', $variables); } Any pointers on how to troubleshoot something like this, or if someone has encountered this problem before and has a solution, would be greatly helpful!
From your code, it's apparent you're using Drupal 7. First things first, you may want to enable theme debug mode. This allows for you to see where the theming function that caused your You can do so by putting the following line in your settings.php file $conf['theme_debug'] = TRUE; Flush your caches after you make this change. You will now have debug code output to your Drupal HTML source, when you view the site's source. An example of the type of output is shown below: <!-- THEME DEBUG --> <!-- CALL: theme('page') --> <!-- FILE NAME SUGGESTIONS: x page--front.tpl.php * page--node.tpl.php * page.tpl.php --> With this debug, you should be able to see exactly which theme functions run, in which order, and by working through them from start to finish, you should be able to determine between which theme is responsible. At this point, if you want to keep Drupal-best-practices, copy the file name suggestion from the debug output to a folder inside your theme folder. I usually put all template overrides in a sub-directory inside it. In the case above, if it was page.tpl.php, I'd copy it to /themes/mytheme/templates/, and go hack on it to see whether the offending div is being generated there. Best of luck, and if you hit a stuck end, I'd be happy to help point you in a direction more specific to your specific user case. Best, Karl
Email Crawler in c++
I have this assignment that I just can't figure out. I want my function to get a line from an html file and extract an email from it. Then Split the email into email, username, and domain. Then i want to have a third function to get the next email in the html file. void get_line_emails(ifstream &in_stream, ofstream &out_stream, string email[], string users[], string domain[]) { int location, end; string mail; getline(in_stream, mail); location = mail.find("mailto:"); end = mail.find(">"); mail = mail.substr(location, (end - 1)); cout << mail << endl; } void get_next_email(ifstream &in_stream, string mail) { getline(in_stream, mail); int location = mail.find("mailto:"); int end = mail.find(">"); mail = mail.substr(location, (end - 1)); } void split_email(string email[], string domain[], string users) { int count = 300; string mail; for (int i = 1; i < count; ++i) //For loop to input stream. { mail = email[i]; int location = mail.find("#"); int end = mail.find(">"); string domain[i] = mail.substr(location, (end - 1)); string users[i] = mail.substr(0, location); } } I also get this error when I run the program: terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 4294967295) > this->size() (which is 244) Abort (core dumped) If it helps heres my main function: int main() { string email[1000]; string users[1000]; string domain[1000]; int count = 300; string filename; ifstream in_stream; ofstream out_stream; cout << "Enter input filename: " << endl; cin >> filename; //Input of filename. in_stream.open(filename.c_str()); //Opening the input file for population and other information. if (in_stream.fail()) //Checking to see if file opens. { cout << "Error opening input/output files" << endl; //Telling user file isn't opening. exit(1); //Exiting program. } out_stream.open("Emails.txt");//If it does not exist it will not be created. If it exists it will be overwritten. out_stream << "Email " << right << setw(20) << "User " << right << setw(20) << "Domain" << endl; out_stream << "_______________________________________________________________________________" << endl; get_line_emails(in_stream, out_stream, email, users, domain); //split_email(email, domain, users); sort(email, users, domain, count); in_stream.close(); //Closing the in stream. out_stream.close(); //Closing the out stream. cout << "A new file Emails has been created with the emails extracted. Thank you." << endl; //End message. return 0; } Part of the HTML file I am inputting: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <!-- Content Copyright Ohio University Server ID: 2--> <!-- Page generated 2016-03-22 14:55:21 by CommonSpot Build 9.0.3.119 (2015-08-14 15:00:01) --> <!-- JavaScript & DHTML Code Copyright © 1998-2015, PaperThin, Inc. All Rights Reserved. --> <head> <meta name="Description" id="Description" content="Faculty" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="Keywords" id="Keywords" content="engineering" /> <meta name="Generator" id="Generator" content="CommonSpot Content Server Build 9.0.3.119" /> <link rel="stylesheet" href="/style/ouws_0111_allin1_nonav.css" type="text/css" /> <link rel="stylesheet" href="/engineering/upload/engineeringEV.css" type="text/css" /> <link rel="stylesheet" href="/engineering/upload/gridpak.css" type="text/css" /> <style type="text/css"> .mw { color:#000000;font-family:Verdana,Arial,Helvetica;font-weight:bold;font-size:xx-small;text-decoration:none; } a.mw:link {color:#000000;font-family:Verdana,Arial,Helvetica;font-weight:bold;font-size:xx-small;text-decoration:none;} a.mw:visited {color:#000000;font-family:Verdana,Arial,Helvetica;font-weight:bold;font-size:xx-small;text-decoration:none;} a.mw:hover {color:#0000FF;font-family:Verdana,Arial,Helvetica;font-weight:bold;font-size:xx-small;text-decoration:none;} </style> <script type="text/javascript"> <!-- var gMenuControlID = 0; var menus_included = 0; var jsDlgLoader = '/engineering/about/people/loader.cfm'; var jsSiteID = 1; var jsSubSiteID = 6148; var js_gvPageID = 2177477; var jsPageID = 2177477; var jsPageSetID = 0; var jsPageType = 0; var jsControlsWithRenderHandlers = ",1366057,1407941,1408984,1409120,1409220,1463564,1653027,1464282,1484855,1663987,1703445,1714178,1719109,1716274,1719109,1719109,1722161,1748941,1743237,1767756,1771704,1240950,1795856,1799077,1806233,1814378,1814378,1814378,36,1156323,958270,959997,36,1239784,1239535,1240103,1264495,1264559,1240832,1241026,1268776,1269019,1365662,1365798,1367666,1367112,1367146,1403322,1236239,1644435,1707482,36,1707482,1708185,1708185,1707846,1718301,1718356,1722082,1735273,1156092,1736675,1738340,1758445,1487747,1740183,1750814,1755341,36,4,1241075,1320447,1410344,1440455,1462605,1463564,1642797,1644920,1644955,1659254,1656252,1707459,1692320,1290294,1705469,1705596,1707846,1708163,1708367,1719109,1719109,1719109,1728460,1718356,1706218,1725200,1739433,1193755,1782561,1806244,1781609,1783821,1784445,1783821,1788664,1750814,1781533,1781788,1812661,1810778,1822088,1644219,39,36,36,438722,443887,523857,542895,36,867909,671210,733944,1074794,671213,671222,671225,671231,671234,1190981,1190914,1190943,1193755,1236239,1239497,1280404,1284325,860732,860741,1080236,671204,1237273,671216,671219,671228,671237,671207,1190973,1243855,1264544,1264564,1241172,1267910,1240840,1240849,1241220,1264699,1241365,1264571,1289737,8,1290184,1321465,1322500,1363024,1365670,1365954,1365998,1366014,2214456,2068897,1837521,1190931,1190931,2239453,1992371,1967400,1992371,1808005,1792195,1792195,1156323,1716646,1967400,1763595,1080236,1971121,1960374,1290151,2007514,2013290,2012663,2012302,2012026,2012663,2021773,1191128,426028,1808005,2108357,426028,36,36,36,2145522,2145522,2186158,1792195,1827509,1827486,1827486,1840641,1843869,1843869,1843879,1843879,1827509,1827486,635375,1190931,1853586,1854295,1854509,1854614,1855117,1855125,1859942,1232520,996841,999747,1074782,801933,1156092,1231112,1240950,1264518,1264536,1240828,1241280,1241033,1241322,1265043,1268750,1269805,1287352,1290231,1321501,1322534,1368599,1407796,1407917,1408156,1408447,1461409,1463586,1466072,1660460,1704499,1701618,1704211,1701596,1707383,1706218,1713783,1713443,1715100,1716646,1714352,1723376,1706218,1717134,1717134,1759841,1740127,1740183,1737868,1755222,1763595,1750814,1812661,1784600,860732,1785700,1786558,1786640,1788366,1788803,1787835,1758851,1802116,1802116,1802116,1802116,1810778,1870892,1827509,1854528,1859942,1859942,1870780,1865837,1905202,1905202,1750814,1243855,1763595,1806295,1806280,860741,1893429,1893243,1893429,1898989,1913110,1915322,1921065,1871293,1872541,1900928,1708367,1874008,1827509,1808005,1948002,1708367,1859942,1827509,1243851,1959041,1243851,1746007,1243851,1243851,1967400,1967400,1191128,1780116,1960374,1960374,1780116,1827486,1156092,1153939,36,1827486,1859942,1974908,1156092,1156323,1763595,1080236,1763595,1854295,1854641,1865837,1867230,1867211,1869328,738180,8,1191128,1808005,1967400,1156323,2104541,2058309,2013290,2047047,2068897,2010928,2087246,2010928,2104541,2104541,2104578,2115265,1708185,2120941,426028,2129783,1663761,2166426,2068897,1967400,1967400,1967400,2068897,1808005,1716646,1833649,1827509,2010085,36,2167570,2068897,1706218,1156092,2012337,2186146,1191128,2191212,1190931,1156323,1716646,2012663,2508370,1992371,1080236,2280950,1808005,36,36,1156323,1808005,1819898,1191128,1243855,2281280,2013290,2239453,1837521,1156323,1644219,1849105,1849105,2376567,2381406,1808005,1808005,1156092,2552104,2552104,2281280,1805958,1967400,2068897,2390125,1808005,2444428,2459222,2013290,2568057,2508370,1661786,1763595,2349059,2349059,2438289,1708367,2120941,2508370,2120951,2596819,1156323,1191128,2239453,2367160,2012337,2451225,1808005,2615851,1808005,1849105,55,55,2734901,1191128,55,55,2012663,2734829,1967400,1967400,1996683,1992371,2013290,2018337,2012337,2018364,1156092,1363024,1967400,1888191,1888191,1805958,1967400,2057362,39,1153939,1708185,2010085,2010085,2010085,2079659,2079659,2010928,2010928,2087246,1808005,36,1190931,2369360,2380491,1808005,2120941,1153939,1708367,2511867,2540778,1704499,1787140,1758479,1716646,1827486,2239453,1808005,1808005,1080236,2451225,2120941,1808005,"; var jsDefaultRenderHandlerProps = ",,"; var jsAuthorizedControls = ",65684,62081,62169,62236,62658,67860,70371,70560,70645,70911,71567,71570,71579,71582,71585,71588,71630,71645,73051,73055,73135,73175,73177,73179,73181,73183,73185,75593,75596,75598,75600,75602,75604,75943,77337,77339,77367,77369,77371,77397,77399,77401,77403,77406,77408,77423,77425,77429,77431,77433,77435,77454,77456,77458,77460,77462,77464,77524,77526,77528,77530,77533,77535,77564,77566,77569,77572,77579,77581,77755,77759,77771,77940,78254,78304,78759,81449,81447,81452,81454,86430,95027,110992,112176,114559,122476,122590,122592,122594,122998,123000,123002,123004,123010,123012,123014,123016,123113,123115,123117,123119,123121,123123,123125,123127,123129,123131,123133,123135,123137,123139,123141,123143,123193,123217,123219,123221,543,1784,1786,1791,1829,1901,1903,3434,3062,10165,17470,19113,17964,17975,20458,18450,19246,20461,20532,20535,20631,22975,22976,29043,29065,29198,29497,29894,32565,37812,42989,50270,50283,51427,51770,51940,51987,52309,52306,52325,52338,52440,52727,52935,53585,53717,54936,55739,56170,57624,70375,57659,58549,60274,60859,65324,65375,65378,65630,341266,341268,341270,343681,344120,344123,344125,344127,344129,344131,344133,1155418,344136,344142,344918,344920,346066,349254,349260,353078,353096,353249,353368,353500,353518,356036,356519,356527,356534,359303,359315,359619,365645,365647,365651,372637,372642,373892,409046,385136,402687,408565,416225,423380,423445,423634,423934,424407,424503,426545,425757,425785,426028,426263,433478,438722,440105,440778,441424,441447,441488,441530,441743,441914,441917,441920,441923,442181,442184,442228,442231,442767,443887,444519,444536,448085,446524,447856,448121,450241,450489,450583,451031,123223,123225,123227,123229,123231,123233,123235,123237,123239,123241,123243,123245,123247,123249,133712,138458,138462,138472,138493,140917,152719,152941,155012,174553,176272,182475,185313,185545,185572,185600,185653,189527,189717,189912,189915,209638,190014,209612,209640,210772,233752,233754,240835,242005,245048,245061,246392,247905,253143,255217,258368,258370,258448,259352,259507,259535,259540,259557,259597,270079,272462,272484,273374,275946,276171,281359,281731,281886,285356,285362,285364,289279,290246,293573,293580,293990,306206,306372,307096,307117,1409047,1410292,1410344,1440455,1462692,1462605,1463206,1463358,1463363,1463559,1463575,1466067,1466072,1466949,565361,577664,577666,580782,580785,586106,593209,631308,631375,671204,671207,671210,671213,671216,671219,671222,671225,671228,630659,630928,631186,631230,671231,703507,703512,872630,872675,951724,1070639,1070773,1071579,1074782,1074794,1116648,1118602,1153954,1153962,310170,319781,325794,326607,326613,331241,331243,331248,338287,338305,338307,338805,340095,340098,341260,341264,523857,523883,540187,541324,542748,542895,543075,543442,543531,545031,545034,545925,550439,550694,551327,551342,551843,551848,554801,557468,563421,563522,564335,564350,564362,565392,565403,565430,565440,565460,578908,580751,589443,589691,589825,631522,631342,671234,704390,704500,730405,733189,733195,733931,733944,735045,721050,721061,720116,803640,807230,860741,867909,869754,878921,872399,911315,951437,952815,952921,954983,956036,958270,960899,960901,960903,960912,960914,960916,959997,990601,993320,996841,999438,999472,999741,999747,999871,1034551,1034553,1035679,1035681,1070829,1080236,1111202,1112587,1112594,1116088,1117180,566481,567951,635375,671237,705089,708277,738180,738270,738274,756640,808480,993241,993247,993326,998452,999162,1034549,1034793,1034795,1118837,1121340,1150407,1152064,1153928,1153933,1153939,1153948,1154637,1156092,1156320,753746,754822,754960,755002,755412,755426,755453,801854,801933,802037,802071,802077,802080,802083,802087,802091,802417,802525,804060,860732,753752,754885,753748,754422,802568,451785,453349,452911,452935,454345,454916,464533,465324,476013,469286,469308,470126,472222,476011,476015,489860,478066,482338,482852,492048,486517,489015,489681,492017,492050,492052,498151,516411,516413,516415,516417,516419,516422,1935063,1939712,1992371,1996683,2010928,2012302,2012840,2013290,2021773,2047047,2058309,2079659,2104541,2108357,2115265,2120941,2120951,2135749,2145522,2157693,2157775,1193061 <img border="0" alt="YouTube" title="YouTube" src="/engineering/images/icon_youtube.png" /><span class="imageCaption" style="display:none;"></span> </div> <div class="imageImg"> <img border="0" alt="LinkedIn" title="LinkedIn" src="/engineering/images/icon_linkedin.png" /><span class="imageCaption" style="display:none;"></span> </div> <div class="imageImg"> <img border="0" alt="Facebook" title="Facebook" src="/engineering/images/icon_fb.png" /><span class="imageCaption" style="display:none;"></span> </div> <div class="imageImg"> <img border="0" alt="Twitter" title="Twitter" src="/engineering/images/icon_twitter.png" /><span class="imageCaption" style="display:none;"></span> </div> <div class="imageImg"> <img border="0" alt="Instagram" title="Instagram" src="/engineering/images/russ_instagram.png" /><span class="imageCaption" style="display:none;"></span> </div> </div></div></div><div id="cs_control_2398199" class="cs_control CS_Element_Custom"></div></div></div><div id="cs_control_2142700" class="contentWrap col row"><div title="" id="CS_Element_2177477_2142700"><div id="cs_control_2142767" class="cs_control col pageTitle"> <!-- Portal Content --> <div class="content-element"> <h2>Faculty</h2> <p></p> <br /> </div> <!-- Portal Content --> </div><div id="cs_control_2142762" class="mainContent col"><div title="" id="CS_Element_2177477_2142762"><div id="cs_control_2142772" class="cs_control CS_Element_Custom"> <!-- Portal Content --> <div class="content-element"> <p> </p> </div> <!-- Portal Content --> </div><div id="cs_control_2177314" class="cs_control"> <style type="text/css"> /* This fixes some issues with the anchor links from the A-Z bar at the top */ .group a[name] { position: absolute; } </style> <div id="staffAlpha"> <ul class="azList"> <li class="children ">A</li> <li class="children ">B</li> <li class="children ">C</li> <li class="children ">D</li> <li class="children ">E</li> <li class="children ">F</li> <li class="children ">G</li> <li class="children ">H</li> <li class="children ">I</li> <li class="children ">J</li> <li class="children ">K</li> <li class="children ">L</li> <li class="children ">M</li> <li class="children ">N</li> <li class="children ">O</li> <li class="children ">P</li> <li>Q</li> <li class="children ">R</li> <li class="children ">S</li> <li class="children ">T</li> <li class="children ">U</li> <li class="children ">V</li> <li class="children ">W</li> <li class="children ">X</li> <li class="children ">Y</li> <li class="children last">Z</li> </ul> <div id="azContent"> <div class="group"> <a id="A" name="A"></a> <h3 class="letter">A</h3> Nasseef Abukamail<br /> Electrical Engineering and Computer Science <br /> Associate Lecturer <br /> abukamai#ohio.edu <br /> 740.593.1229 <div><br /> </div>Khairul Alam<br /> Mechanical Engineering, Center for Advanced Materials Processing, ESP Lab <br /> Professor <br /> alam#ohio.edu <br /> 740.593.1558 <div><br /> </div>Muhammad Ali<br /> Biomedical Engineering, Mechanical Engineering, ESP Lab <br /> Associate Professor <br /> alim1#ohio.edu <br /> 740.593.1389 <div><br /> </div>Deak Arch<br /> Aviation <br /> Associate Professor, Assistant Chair <br /> arch#ohio.edu <br /> 740.597.2688
Divide the problem up into tasks. You have four tasks and they should be tackled individually. Do not proceed to the next task until you know the current task does exactly what you want. Working on more than one task at a time widens the problem area, and this turns out to be more than a geometric expansion. Bugs tend to interact with other bugs. A bug in task 1 may make a bug in task 2 look different, causing you to debug the wrong symptoms. Consider giving each task a function or if the task is complex, its own file. This way each task can be individually tested easily. Why? What if you change the code from task 1 and want to know if it broke? Sure you can test the whole program, but what if you broke 2 things? If you want to test the splitter logic with a few hundred addresses to make sure you correctly handle all of the weird edge cases, you can just call the splitter function with those few hundred strings and not have to invent a complicated file. Task 1: read a file line by line. This is first because until you can do this, you can't do much else. std::string line; while (std::getline(in_stream, line)) { // output line to compare with source } will read a file until it cannot be read anymore be this end of file, corrupt data, some joker pulling out the USB drive while you're reading it, or sundry other problems. How do you test this? An easy way is to read the file in from one stream line by line and print it to the console. This is a pretty big file and the eye is only so useful for comparing large amounts of text, so write all received lines to an output file and then diff the files. If they match, you win. Move on to task 2. If they don't, debug. Task 2: Look for "mailto". This take a line from task 1 and looks for "mailto" size_t loc = line.find("mailto:"); if (loc != std::string::npos) { std::cout << "found: " << line << std::endl; } This is an easier thing to test so we can get away with the mk 1 eyeball or Notepad and ctrl+f to confirm that all mailto lines were printed. Task 3: Isolate the address. You've found a line containing "mailto" in task 2. Now you have to isolate the address on that line. You have the starting location from task 2 and you may be able to extract the string between the ':' after "mailto" and the next '\"'. I'm not going to spend much time here because this is the meat and potatoes of this assignment. I do too much here and I pass the course, not you, but basically this is a find and a substr similar to what OP has in their question. Task 4: Split the Address from task 3 This is more work with find and substr to isolate the parts of the address.
You need to make a loop and test every line until you find one with the string "mailto:". Here is some example code to give you an idea of how you can do that: std::ifstream ifs("test.txt"); std::string line; // general buffer // read each line while(std::getline(ifs, line)) { // try to find "mailto:" std::string::size_type pos = line.find("mailto:"); // ignore if not found if(pos == std::string::npos) continue; // we found it! extract address from line here // remember that pos holds the start of the information // ... }
Regex over a html page
Hello I'm trying to select 4 values from a html page (static page of a printer) The thing is i have some issues succeeding. I have some attempts all fail could you guys help me pls: hole page = http://pastebin.com/e7eKAV0x code of intresst: <tr> <td> Yellow Cartridge <br> Order 305A (CE412A) </td> <td class="alignRight valignTop"> 40% † </td> </tr> (Please use inspect / check the page) I need the 40% value from 4 different filds(printer colors). When color is out -- My last try: public void buildCartigesAndValue(String ipString) throws IOException { LOGGER.log(Level.INFO, "Starting mining over IP " + ipString); String context = getUrlSource(ipString); System.out.println(context); urlPart = "/info_colorUsageJobLog.html?tab=Status&menu=ColorUsageLog"; if (context.contains("HP Color LaserJet CP2025dn") || context.contains("HP Color LaserJet CM2320nf MFP")) { LOGGER.log(Level.INFO, "PRINTER TYPE ======= HP Color LaserJet CP2025dn"); regexColorContent = "\\w+\\W{1}Cartridge (?<!Printer)"; regexTagContent = "(<td{1}>)([^<]{1}[^.{20}][^ ].*?)(</td>)"; } else if (context.contains("HP LaserJet 400 color M451dw")){ LOGGER.log(Level.INFO, "PRINTER TYPE ======= HP LaserJet 400 color M451dw"); regexColorContent = "\\w+\\W{1}Cartridge (?<!Printer)"; regexTagContent = "Cartridge.{50}"; } List<Integer> vals = findCartegisProcentr(context); List<String> colors = findCartigesColor(context); for (int i = 0; i < colors.size(); i++) { if (colors.get(i).contains("Printer")) { continue; } System.out.println(colors.get(i)); addNewColorVal(colors.get(i), vals.get(i)); } LOGGER.log(Level.INFO, "Stopping sucessfully ---- MAP ---- " + this.colorAmountMap.toString()); } public List<Integer> findCartegisProcentr(String context) { List<Integer> vals = new ArrayList<>(); regexValContent = "\\d{2}|-{2}"; // FOR PARTICULAR THE VALUES Pattern patternTagContent = Pattern.compile(regexTagContent); Matcher matcherTagContent = patternTagContent.matcher(context); Pattern patternValContent = Pattern.compile(regexValContent); while (matcherTagContent.find()) { Matcher matcherValContent = patternValContent .matcher(matcherTagContent.group()); matcherValContent.find(); try { vals.add(Integer.parseInt(matcherValContent.group())); } catch (Exception e) { vals.add(0); } } return vals; }